From 4ac97746ce45b85ba80ef7f88ff03caff5e759fa Mon Sep 17 00:00:00 2001 From: dtoxvanilla1991 Date: Tue, 21 Apr 2026 21:06:40 +0100 Subject: [PATCH 1/7] chore(deps): upgrade eslint and @eslint/js to v10 with migration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Bump eslint ^9.9.1 → ^10.0.0 (resolves 10.2.1) - Bump @eslint/js ^9.9.1 → ^10.0.0 (resolves 10.0.1) - Upgrade typescript-eslint 8.46.0 → 8.59.0 (required for ESLint v10.0.1+ compatibility) ESLint v10 removed the FlatESLint export that @typescript-eslint/utils@8.46.0 depended on; upgrading to typescript-eslint@8.59.0 (which declares eslint ^10.0.0 as a valid peer) fixes the runtime crash. ESLint v10 updated eslint:recommended with two new rules that fired on existing code — fixed all violations: - preserve-caught-error: added { cause: e } to 4 rethrown errors in generateAuthUrl.ts, generatePortalUrl.ts, navigateToKinde.ts, callAccountApi.ts - no-useless-assignment: removed dead initial assignments in generateAuthUrl.ts (codeChallenge = "") and callAccountApi.ts (items = []) All 616 tests pass. Lint is clean. Closes/replaces: #198 --- lib/utils/generateAuthUrl.ts | 6 +- lib/utils/generatePortalUrl.ts | 5 +- lib/utils/navigateToKinde.ts | 2 +- lib/utils/token/accountApi/callAccountApi.ts | 7 +- package.json | 6 +- pnpm-lock.yaml | 495 ++++++++++--------- 6 files changed, 269 insertions(+), 252 deletions(-) diff --git a/lib/utils/generateAuthUrl.ts b/lib/utils/generateAuthUrl.ts index c13301af..b915a229 100644 --- a/lib/utils/generateAuthUrl.ts +++ b/lib/utils/generateAuthUrl.ts @@ -80,7 +80,9 @@ export const generateAuthUrl = async ( } catch (ex: unknown) { const errorDescription = ex instanceof Error ? ex.message : "Unknown error"; - throw new Error(`Error handing reauth state: ${errorDescription}`); + throw new Error(`Error handing reauth state: ${errorDescription}`, { + cause: ex, + }); } } @@ -161,7 +163,7 @@ export async function generatePKCEPair(): Promise<{ }> { const codeVerifier = generateRandomString(52); const data = new TextEncoder().encode(codeVerifier); - let codeChallenge = ""; + let codeChallenge: string; if (!crypto) { codeChallenge = base64UrlEncode(codeVerifier); } else { diff --git a/lib/utils/generatePortalUrl.ts b/lib/utils/generatePortalUrl.ts index 0b3b19ec..daf5753a 100644 --- a/lib/utils/generatePortalUrl.ts +++ b/lib/utils/generatePortalUrl.ts @@ -108,6 +108,9 @@ export const generatePortalUrl = async ({ }; } catch (error) { console.error(error); - throw new Error(`Invalid URL format received from API: ${fetchResult.url}`); + throw new Error( + `Invalid URL format received from API: ${fetchResult.url}`, + { cause: error }, + ); } }; diff --git a/lib/utils/navigateToKinde.ts b/lib/utils/navigateToKinde.ts index 97692de7..11313f34 100644 --- a/lib/utils/navigateToKinde.ts +++ b/lib/utils/navigateToKinde.ts @@ -157,7 +157,7 @@ export const createPopup = async ({ try { await waitForMessage(); } catch (error) { - throw new Error("Popup authentication failed: " + error); + throw new Error("Popup authentication failed: " + error, { cause: error }); } return popup; }; diff --git a/lib/utils/token/accountApi/callAccountApi.ts b/lib/utils/token/accountApi/callAccountApi.ts index 876e4fd9..733a024a 100644 --- a/lib/utils/token/accountApi/callAccountApi.ts +++ b/lib/utils/token/accountApi/callAccountApi.ts @@ -31,7 +31,9 @@ export async function callAccountApi(route: AccountApiRoute): Promise { }, }); } catch (error) { - throw new Error(`Failed to fetch from ${domain.value}/${route}: ${error}`); + throw new Error(`Failed to fetch from ${domain.value}/${route}: ${error}`, { + cause: error, + }); } if (!response.ok) { @@ -47,9 +49,8 @@ export const callAccountApiPaginated = async ({ }: { url: AccountApiRoute; }): Promise => { - let items: T["data"] = []; let returnValue = await callAccountApi(url); - items = returnValue.data; + let items: T["data"] = returnValue.data; if (returnValue.metadata?.has_more) { let nextPageStartingAfter = returnValue.metadata.next_page_starting_after; while (returnValue.metadata.has_more) { diff --git a/package.json b/package.json index e55eda3d..310001ab 100644 --- a/package.json +++ b/package.json @@ -37,17 +37,17 @@ }, "sideEffects": false, "devDependencies": { - "@eslint/js": "^9.9.1", + "@eslint/js": "^10.0.0", "@types/chrome": "^0.1.0", "@types/node": "^24.0.0", "@vitejs/plugin-react": "^5.0.0", "@vitest/coverage-v8": "^4.0.3", - "eslint": "^9.9.1", + "eslint": "^10.0.0", "globals": "^17.0.0", "jsdom": "^29.0.0", "prettier": "^3.3.3", "typescript": "^6.0.0", - "typescript-eslint": "^8.3.0", + "typescript-eslint": "^8.59.0", "vite": "^7.0.0", "vite-plugin-dts": "^4.0.3", "vitest": "^4.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2350729e..1fc0cc92 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,8 +16,8 @@ importers: version: 14.0.1(expo@52.0.46(@babel/core@7.28.4)(@babel/preset-env@7.26.9(@babel/core@7.28.4))(react-native@0.79.1(@babel/core@7.28.4)(react@19.1.0))(react@19.1.0)) devDependencies: '@eslint/js': - specifier: ^9.9.1 - version: 9.37.0 + specifier: ^10.0.0 + version: 10.0.1(eslint@10.2.1) '@types/chrome': specifier: ^0.1.0 version: 0.1.22 @@ -31,8 +31,8 @@ importers: specifier: ^4.0.3 version: 4.0.3(vitest@4.0.3(@types/node@24.9.1)(jsdom@29.0.0)(lightningcss@1.27.0)(terser@5.39.0)) eslint: - specifier: ^9.9.1 - version: 9.37.0 + specifier: ^10.0.0 + version: 10.2.1 globals: specifier: ^17.0.0 version: 17.0.0 @@ -46,8 +46,8 @@ importers: specifier: ^6.0.0 version: 6.0.2 typescript-eslint: - specifier: ^8.3.0 - version: 8.46.0(eslint@9.37.0)(typescript@6.0.2) + specifier: ^8.59.0 + version: 8.59.0(eslint@10.2.1)(typescript@6.0.2) vite: specifier: ^7.0.0 version: 7.1.11(@types/node@24.9.1)(lightningcss@1.27.0)(terser@5.39.0) @@ -1003,37 +1003,44 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint/config-array@0.21.0': - resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-helpers@0.4.0': - resolution: {integrity: sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-array@0.23.5': + resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/core@0.16.0': - resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-helpers@0.5.5': + resolution: {integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@1.2.1': + resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/js@9.37.0': - resolution: {integrity: sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@10.0.1': + resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + peerDependencies: + eslint: ^10.0.0 + peerDependenciesMeta: + eslint: + optional: true - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/object-schema@3.0.5': + resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/plugin-kit@0.4.0': - resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/plugin-kit@0.7.1': + resolution: {integrity: sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@exodus/bytes@1.15.0': resolution: {integrity: sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==} @@ -1497,6 +1504,9 @@ packages: '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -1539,63 +1549,63 @@ packages: '@types/yargs@17.0.33': resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - '@typescript-eslint/eslint-plugin@8.46.0': - resolution: {integrity: sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA==} + '@typescript-eslint/eslint-plugin@8.59.0': + resolution: {integrity: sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.46.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/parser': ^8.59.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.46.0': - resolution: {integrity: sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ==} + '@typescript-eslint/parser@8.59.0': + resolution: {integrity: sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.46.0': - resolution: {integrity: sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==} + '@typescript-eslint/project-service@8.59.0': + resolution: {integrity: sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.46.0': - resolution: {integrity: sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==} + '@typescript-eslint/scope-manager@8.59.0': + resolution: {integrity: sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.46.0': - resolution: {integrity: sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==} + '@typescript-eslint/tsconfig-utils@8.59.0': + resolution: {integrity: sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.46.0': - resolution: {integrity: sha512-hy+lvYV1lZpVs2jRaEYvgCblZxUoJiPyCemwbQZ+NGulWkQRy0HRPYAoef/CNSzaLt+MLvMptZsHXHlkEilaeg==} + '@typescript-eslint/type-utils@8.59.0': + resolution: {integrity: sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.46.0': - resolution: {integrity: sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==} + '@typescript-eslint/types@8.59.0': + resolution: {integrity: sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.46.0': - resolution: {integrity: sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==} + '@typescript-eslint/typescript-estree@8.59.0': + resolution: {integrity: sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.46.0': - resolution: {integrity: sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==} + '@typescript-eslint/utils@8.59.0': + resolution: {integrity: sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.46.0': - resolution: {integrity: sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==} + '@typescript-eslint/visitor-keys@8.59.0': + resolution: {integrity: sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@urql/core@5.1.1': @@ -1682,11 +1692,12 @@ packages: '@xmldom/xmldom@0.7.13': resolution: {integrity: sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==} engines: {node: '>=10.0.0'} - deprecated: this version is no longer supported, please update to at least 0.8.* + deprecated: this version has critical issues, please update to the latest version '@xmldom/xmldom@0.8.10': resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} engines: {node: '>=10.0.0'} + deprecated: this version has critical issues, please update to the latest version abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} @@ -1706,6 +1717,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1726,8 +1742,8 @@ packages: ajv: optional: true - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.14.0: + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} @@ -1881,6 +1897,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -1919,6 +1939,10 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + engines: {node: 18 || 20 || >=22} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -1970,10 +1994,6 @@ packages: resolution: {integrity: sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==} engines: {node: '>=4'} - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} @@ -2327,21 +2347,21 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-scope@8.4.0: - resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-scope@9.1.2: + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@9.37.0: - resolution: {integrity: sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint@10.2.1: + resolution: {integrity: sha512-wiyGaKsDgqXvF40P8mDwiUp/KQjE1FdrIEJsM8PZ3XCiniTMXS3OHWWUe5FI5agoCnr8x4xPrTDZuxsBlNHl+Q==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: jiti: '*' @@ -2349,17 +2369,17 @@ packages: jiti: optional: true - espree@10.4.0: - resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + espree@11.2.0: + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -2650,10 +2670,6 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - globals@17.0.0: resolution: {integrity: sha512-gv5BeD2EssA793rlFWVPMMCqefTlpusw6/2TbAVMy0FzcG8wKJn4O+NqJ4+XWmmwrayJgw5TzrmWjFgmz1XPqw==} engines: {node: '>=18'} @@ -2669,9 +2685,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -2743,10 +2756,6 @@ packages: resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==} engines: {node: '>=4'} - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - import-lazy@4.0.0: resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} engines: {node: '>=8'} @@ -3100,9 +3109,6 @@ packages: lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.throttle@4.1.1: resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} @@ -3262,6 +3268,10 @@ packages: resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} engines: {node: '>=4'} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + minimatch@3.0.8: resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} @@ -3468,10 +3478,6 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - parse-json@4.0.0: resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} engines: {node: '>=4'} @@ -3539,6 +3545,10 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} @@ -3715,10 +3725,6 @@ packages: resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} engines: {node: '>=4'} - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -3799,6 +3805,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} + hasBin: true + send@0.19.0: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} @@ -4047,6 +4058,10 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} + engines: {node: '>=12.0.0'} + tinyrainbow@3.0.3: resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} engines: {node: '>=14.0.0'} @@ -4080,8 +4095,8 @@ packages: resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} engines: {node: '>=20'} - ts-api-utils@2.1.0: - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -4112,12 +4127,12 @@ packages: resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} engines: {node: '>=8'} - typescript-eslint@8.46.0: - resolution: {integrity: sha512-6+ZrB6y2bT2DX3K+Qd9vn7OFOJR+xSLDj+Aw/N3zBwUt27uTw2sw2TE2+UcY1RiyBZkaGbTkVg9SSdPNUG6aUw==} + typescript-eslint@8.59.0: + resolution: {integrity: sha512-BU3ONW9X+v90EcCH9ZS6LMackcVtxRLlI3XrYyqZIwVSHIk7Qf7bFw1z0M9Q0IUxhTMZCf8piY9hTYaNEIASrw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' typescript@5.8.2: resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} @@ -5507,50 +5522,43 @@ snapshots: '@esbuild/win32-x64@0.25.11': optional: true - '@eslint-community/eslint-utils@4.9.0(eslint@9.37.0)': + '@eslint-community/eslint-utils@4.9.0(eslint@10.2.1)': dependencies: - eslint: 9.37.0 + eslint: 10.2.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.12.1': {} + '@eslint-community/eslint-utils@4.9.1(eslint@10.2.1)': + dependencies: + eslint: 10.2.1 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.21.0': + '@eslint/config-array@0.23.5': dependencies: - '@eslint/object-schema': 2.1.6 + '@eslint/object-schema': 3.0.5 debug: 4.4.3 - minimatch: 3.1.2 + minimatch: 10.2.5 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.4.0': + '@eslint/config-helpers@0.5.5': dependencies: - '@eslint/core': 0.16.0 + '@eslint/core': 1.2.1 - '@eslint/core@0.16.0': + '@eslint/core@1.2.1': dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.1': - dependencies: - ajv: 6.12.6 - debug: 4.4.3 - espree: 10.4.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@9.37.0': {} + '@eslint/js@10.0.1(eslint@10.2.1)': + optionalDependencies: + eslint: 10.2.1 - '@eslint/object-schema@2.1.6': {} + '@eslint/object-schema@3.0.5': {} - '@eslint/plugin-kit@0.4.0': + '@eslint/plugin-kit@0.7.1': dependencies: - '@eslint/core': 0.16.0 + '@eslint/core': 1.2.1 levn: 0.4.1 '@exodus/bytes@1.15.0': {} @@ -6318,6 +6326,8 @@ snapshots: '@types/deep-eql@4.0.2': {} + '@types/esrecurse@4.3.1': {} + '@types/estree@1.0.8': {} '@types/filesystem@0.0.36': @@ -6360,98 +6370,96 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0)(typescript@6.0.2))(eslint@9.37.0)(typescript@6.0.2)': + '@typescript-eslint/eslint-plugin@8.59.0(@typescript-eslint/parser@8.59.0(eslint@10.2.1)(typescript@6.0.2))(eslint@10.2.1)(typescript@6.0.2)': dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.46.0(eslint@9.37.0)(typescript@6.0.2) - '@typescript-eslint/scope-manager': 8.46.0 - '@typescript-eslint/type-utils': 8.46.0(eslint@9.37.0)(typescript@6.0.2) - '@typescript-eslint/utils': 8.46.0(eslint@9.37.0)(typescript@6.0.2) - '@typescript-eslint/visitor-keys': 8.46.0 - eslint: 9.37.0 - graphemer: 1.4.0 + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.59.0(eslint@10.2.1)(typescript@6.0.2) + '@typescript-eslint/scope-manager': 8.59.0 + '@typescript-eslint/type-utils': 8.59.0(eslint@10.2.1)(typescript@6.0.2) + '@typescript-eslint/utils': 8.59.0(eslint@10.2.1)(typescript@6.0.2) + '@typescript-eslint/visitor-keys': 8.59.0 + eslint: 10.2.1 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@6.0.2) + ts-api-utils: 2.5.0(typescript@6.0.2) typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.46.0(eslint@9.37.0)(typescript@6.0.2)': + '@typescript-eslint/parser@8.59.0(eslint@10.2.1)(typescript@6.0.2)': dependencies: - '@typescript-eslint/scope-manager': 8.46.0 - '@typescript-eslint/types': 8.46.0 - '@typescript-eslint/typescript-estree': 8.46.0(typescript@6.0.2) - '@typescript-eslint/visitor-keys': 8.46.0 + '@typescript-eslint/scope-manager': 8.59.0 + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.2) + '@typescript-eslint/visitor-keys': 8.59.0 debug: 4.4.3 - eslint: 9.37.0 + eslint: 10.2.1 typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.46.0(typescript@6.0.2)': + '@typescript-eslint/project-service@8.59.0(typescript@6.0.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.46.0(typescript@6.0.2) - '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@6.0.2) + '@typescript-eslint/types': 8.59.0 debug: 4.4.3 typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.46.0': + '@typescript-eslint/scope-manager@8.59.0': dependencies: - '@typescript-eslint/types': 8.46.0 - '@typescript-eslint/visitor-keys': 8.46.0 + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/visitor-keys': 8.59.0 - '@typescript-eslint/tsconfig-utils@8.46.0(typescript@6.0.2)': + '@typescript-eslint/tsconfig-utils@8.59.0(typescript@6.0.2)': dependencies: typescript: 6.0.2 - '@typescript-eslint/type-utils@8.46.0(eslint@9.37.0)(typescript@6.0.2)': + '@typescript-eslint/type-utils@8.59.0(eslint@10.2.1)(typescript@6.0.2)': dependencies: - '@typescript-eslint/types': 8.46.0 - '@typescript-eslint/typescript-estree': 8.46.0(typescript@6.0.2) - '@typescript-eslint/utils': 8.46.0(eslint@9.37.0)(typescript@6.0.2) + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.2) + '@typescript-eslint/utils': 8.59.0(eslint@10.2.1)(typescript@6.0.2) debug: 4.4.3 - eslint: 9.37.0 - ts-api-utils: 2.1.0(typescript@6.0.2) + eslint: 10.2.1 + ts-api-utils: 2.5.0(typescript@6.0.2) typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.46.0': {} + '@typescript-eslint/types@8.59.0': {} - '@typescript-eslint/typescript-estree@8.46.0(typescript@6.0.2)': + '@typescript-eslint/typescript-estree@8.59.0(typescript@6.0.2)': dependencies: - '@typescript-eslint/project-service': 8.46.0(typescript@6.0.2) - '@typescript-eslint/tsconfig-utils': 8.46.0(typescript@6.0.2) - '@typescript-eslint/types': 8.46.0 - '@typescript-eslint/visitor-keys': 8.46.0 + '@typescript-eslint/project-service': 8.59.0(typescript@6.0.2) + '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@6.0.2) + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/visitor-keys': 8.59.0 debug: 4.4.3 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@6.0.2) + minimatch: 10.2.5 + semver: 7.7.4 + tinyglobby: 0.2.16 + ts-api-utils: 2.5.0(typescript@6.0.2) typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.46.0(eslint@9.37.0)(typescript@6.0.2)': + '@typescript-eslint/utils@8.59.0(eslint@10.2.1)(typescript@6.0.2)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0) - '@typescript-eslint/scope-manager': 8.46.0 - '@typescript-eslint/types': 8.46.0 - '@typescript-eslint/typescript-estree': 8.46.0(typescript@6.0.2) - eslint: 9.37.0 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1) + '@typescript-eslint/scope-manager': 8.59.0 + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.2) + eslint: 10.2.1 typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.46.0': + '@typescript-eslint/visitor-keys@8.59.0': dependencies: - '@typescript-eslint/types': 8.46.0 - eslint-visitor-keys: 4.2.1 + '@typescript-eslint/types': 8.59.0 + eslint-visitor-keys: 5.0.1 '@urql/core@5.1.1': dependencies: @@ -6591,12 +6599,14 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-jsx@5.3.2(acorn@8.15.0): + acorn-jsx@5.3.2(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 acorn@8.15.0: {} + acorn@8.16.0: {} + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 @@ -6610,7 +6620,7 @@ snapshots: optionalDependencies: ajv: 8.13.0 - ajv@6.12.6: + ajv@6.14.0: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 @@ -6805,6 +6815,8 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + base64-js@1.5.1: {} baseline-browser-mapping@2.8.9: {} @@ -6844,6 +6856,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.5: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -6908,8 +6924,6 @@ snapshots: callsites@2.0.0: {} - callsites@3.1.0: {} - camelcase@5.3.1: {} camelcase@6.3.0: {} @@ -7249,39 +7263,37 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-scope@8.4.0: + eslint-scope@9.1.2: dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.8 esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.2.1: {} + eslint-visitor-keys@5.0.1: {} - eslint@9.37.0: + eslint@10.2.1: dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.4.0 - '@eslint/core': 0.16.0 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.37.0 - '@eslint/plugin-kit': 0.4.0 + '@eslint-community/eslint-utils': 4.9.0(eslint@10.2.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 - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - chalk: 4.1.2 + ajv: 6.14.0 cross-spawn: 7.0.6 debug: 4.4.3 escape-string-regexp: 4.0.0 - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 - esquery: 1.6.0 + 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 @@ -7291,22 +7303,21 @@ snapshots: imurmurhash: 0.1.4 is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 + minimatch: 10.2.5 natural-compare: 1.4.0 optionator: 0.9.4 transitivePeerDependencies: - supports-color - espree@10.4.0: + espree@11.2.0: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - eslint-visitor-keys: 4.2.1 + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 5.0.1 esprima@4.0.1: {} - esquery@1.6.0: + esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -7482,6 +7493,10 @@ snapshots: optionalDependencies: picomatch: 4.0.3 + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + fetch-retry@4.1.1: {} file-entry-cache@8.0.0: @@ -7652,8 +7667,6 @@ snapshots: globals@11.12.0: {} - globals@14.0.0: {} - globals@17.0.0: {} globby@11.1.0: @@ -7669,8 +7682,6 @@ snapshots: graceful-fs@4.2.11: {} - graphemer@1.4.0: {} - has-flag@3.0.0: {} has-flag@4.0.0: {} @@ -7734,11 +7745,6 @@ snapshots: caller-path: 2.0.0 resolve-from: 3.0.0 - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - import-lazy@4.0.0: {} imurmurhash@0.1.4: {} @@ -8110,8 +8116,6 @@ snapshots: lodash.debounce@4.0.8: {} - lodash.merge@4.6.2: {} - lodash.throttle@4.1.1: {} lodash@4.17.21: {} @@ -8374,6 +8378,10 @@ snapshots: mimic-fn@1.2.0: {} + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.5 + minimatch@3.0.8: dependencies: brace-expansion: 1.1.12 @@ -8564,10 +8572,6 @@ snapshots: package-json-from-dist@1.0.1: {} - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - parse-json@4.0.0: dependencies: error-ex: 1.3.2 @@ -8614,6 +8618,8 @@ snapshots: picomatch@4.0.3: {} + picomatch@4.0.4: {} + pify@4.0.1: {} pirates@4.0.7: {} @@ -8821,8 +8827,6 @@ snapshots: resolve-from@3.0.0: {} - resolve-from@4.0.0: {} - resolve-from@5.0.0: {} resolve-workspace-root@2.0.0: {} @@ -8911,6 +8915,8 @@ snapshots: semver@7.7.2: {} + semver@7.7.4: {} + send@0.19.0: dependencies: debug: 2.6.9 @@ -9137,7 +9143,7 @@ snapshots: terser@5.39.0: dependencies: '@jridgewell/source-map': 0.3.11 - acorn: 8.15.0 + acorn: 8.16.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -9168,6 +9174,11 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 + tinyglobby@0.2.16: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + tinyrainbow@3.0.3: {} tldts-core@7.0.16: {} @@ -9194,7 +9205,7 @@ snapshots: dependencies: punycode: 2.3.1 - ts-api-utils@2.1.0(typescript@6.0.2): + ts-api-utils@2.5.0(typescript@6.0.2): dependencies: typescript: 6.0.2 @@ -9214,13 +9225,13 @@ snapshots: type-fest@0.7.1: {} - typescript-eslint@8.46.0(eslint@9.37.0)(typescript@6.0.2): + typescript-eslint@8.59.0(eslint@10.2.1)(typescript@6.0.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0)(typescript@6.0.2))(eslint@9.37.0)(typescript@6.0.2) - '@typescript-eslint/parser': 8.46.0(eslint@9.37.0)(typescript@6.0.2) - '@typescript-eslint/typescript-estree': 8.46.0(typescript@6.0.2) - '@typescript-eslint/utils': 8.46.0(eslint@9.37.0)(typescript@6.0.2) - eslint: 9.37.0 + '@typescript-eslint/eslint-plugin': 8.59.0(@typescript-eslint/parser@8.59.0(eslint@10.2.1)(typescript@6.0.2))(eslint@10.2.1)(typescript@6.0.2) + '@typescript-eslint/parser': 8.59.0(eslint@10.2.1)(typescript@6.0.2) + '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.2) + '@typescript-eslint/utils': 8.59.0(eslint@10.2.1)(typescript@6.0.2) + eslint: 10.2.1 typescript: 6.0.2 transitivePeerDependencies: - supports-color From 387ff7d43dc96889379c52a1481b4a262b933b3f Mon Sep 17 00:00:00 2001 From: dtoxvanilla1991 Date: Tue, 21 Apr 2026 22:06:19 +0100 Subject: [PATCH 2/7] test: add missing coverage for ESLint v10 migration changes - callAccountApi: test fetch network error path (catch block with { cause }) - navigateToKinde: test popup auth failure when addEventListener throws --- lib/utils/navigateToKinde.test.ts | 15 +++++++++++++++ .../token/accountApi/callAccountApi.test.ts | 16 ++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/lib/utils/navigateToKinde.test.ts b/lib/utils/navigateToKinde.test.ts index 9f24fedd..e50e546b 100644 --- a/lib/utils/navigateToKinde.test.ts +++ b/lib/utils/navigateToKinde.test.ts @@ -239,6 +239,21 @@ describe("navigateToKinde", () => { expect(searchParams.get("error")).toBe("access_denied"); expect(searchParams.get("error_description")).toBe("User denied access"); }); + + it("should throw 'Popup authentication failed' when the message listener throws", async () => { + vi.spyOn(window, "addEventListener").mockImplementationOnce(() => { + throw new Error("Listener registration failed"); + }); + + const err = await createPopup({ + url: "https://auth.example.com", + }).catch((e) => e); + + expect(err).toBeInstanceOf(Error); + expect(err.message).toContain("Popup authentication failed"); + expect(err.cause).toBeInstanceOf(Error); + expect((err.cause as Error).message).toBe("Listener registration failed"); + }); }); describe("waitForPopupClose", () => { diff --git a/lib/utils/token/accountApi/callAccountApi.test.ts b/lib/utils/token/accountApi/callAccountApi.test.ts index 4e1e9aac..f8d2cd48 100644 --- a/lib/utils/token/accountApi/callAccountApi.test.ts +++ b/lib/utils/token/accountApi/callAccountApi.test.ts @@ -82,4 +82,20 @@ describe("callAccountApi", () => { }), ); }); + + it("throws error with cause if fetch throws a network error", async () => { + const token = createMockAccessToken(); + await store.setSessionItem(StorageKeys.accessToken, token); + + const networkError = new Error("Network failure"); + fetchMock.mockRejectOnce(networkError); + + const caughtError = await callAccountApi("account_api/test").catch( + (e) => e, + ); + expect(caughtError.message).toContain( + "Failed to fetch from https://kinde.com/account_api/test", + ); + expect(caughtError.cause).toBe(networkError); + }); }); From f181e8fe7b3baad6d34bfbc253cc08d8ca471017 Mon Sep 17 00:00:00 2001 From: dtoxvanilla1991 Date: Tue, 21 Apr 2026 22:16:02 +0100 Subject: [PATCH 3/7] fix(test): increase timeout in flaky memory store listener test The async listener waits 5ms, but scheduleNotification uses setTimeout(0) which can take several ms on loaded CI runners. Combined, the original 10ms wait was insufficient. Increased to 50ms to match the safety margin used in the adjacent async listener test (10ms internal + 20ms wait = 2x + buffer). --- lib/sessionManager/stores/memory.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/sessionManager/stores/memory.test.ts b/lib/sessionManager/stores/memory.test.ts index bba5998b..1efa03b4 100644 --- a/lib/sessionManager/stores/memory.test.ts +++ b/lib/sessionManager/stores/memory.test.ts @@ -265,7 +265,8 @@ describe("MemoryStorage subscription/listening mechanism", () => { await sessionManager.setSessionItem(StorageKeys.idToken, "mixedTest"); // Wait for setTimeout to fire and async listener to complete - await new Promise((resolve) => setTimeout(resolve, 10)); + // Using 50ms to account for CI variance in setTimeout(0) scheduling overhead + await new Promise((resolve) => setTimeout(resolve, 50)); expect(syncCalled).toBe(true); expect(asyncCalled).toBe(true); From f6e1f25477b7e0dc48bf6a509e7868181d2d2304 Mon Sep 17 00:00:00 2001 From: dtoxvanilla1991 Date: Tue, 21 Apr 2026 22:16:56 +0100 Subject: [PATCH 4/7] fix: remove stringified error from thrown Error messages Per CodeRabbit review: don't interpolate error into the message when the original error is already preserved via the cause property. - navigateToKinde.ts: 'Popup authentication failed: ' + error -> 'Popup authentication failed' - callAccountApi.ts: 'Failed to fetch from ...route: ${error}' -> 'Failed to fetch from ...route' --- lib/utils/navigateToKinde.ts | 2 +- lib/utils/token/accountApi/callAccountApi.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/utils/navigateToKinde.ts b/lib/utils/navigateToKinde.ts index 11313f34..b609fc00 100644 --- a/lib/utils/navigateToKinde.ts +++ b/lib/utils/navigateToKinde.ts @@ -157,7 +157,7 @@ export const createPopup = async ({ try { await waitForMessage(); } catch (error) { - throw new Error("Popup authentication failed: " + error, { cause: error }); + throw new Error("Popup authentication failed", { cause: error }); } return popup; }; diff --git a/lib/utils/token/accountApi/callAccountApi.ts b/lib/utils/token/accountApi/callAccountApi.ts index 733a024a..2a9d7d80 100644 --- a/lib/utils/token/accountApi/callAccountApi.ts +++ b/lib/utils/token/accountApi/callAccountApi.ts @@ -31,7 +31,7 @@ export async function callAccountApi(route: AccountApiRoute): Promise { }, }); } catch (error) { - throw new Error(`Failed to fetch from ${domain.value}/${route}: ${error}`, { + throw new Error(`Failed to fetch from ${domain.value}/${route}`, { cause: error, }); } From 317150afa9e0a45b91fd43c1d233a089aa8e20f5 Mon Sep 17 00:00:00 2001 From: dtoxvanilla1991 Date: Sat, 25 Apr 2026 00:17:56 +0100 Subject: [PATCH 5/7] fix(test): use fake timers to eliminate flaky real-time wait in mixed listener test --- lib/sessionManager/stores/memory.test.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/sessionManager/stores/memory.test.ts b/lib/sessionManager/stores/memory.test.ts index 1efa03b4..891fed77 100644 --- a/lib/sessionManager/stores/memory.test.ts +++ b/lib/sessionManager/stores/memory.test.ts @@ -1,4 +1,4 @@ -import { describe, it, expect, beforeEach } from "vitest"; +import { describe, it, expect, beforeEach, vi } from "vitest"; import { MemoryStorage } from "./memory"; import { StorageKeys } from "../types"; @@ -259,14 +259,14 @@ describe("MemoryStorage subscription/listening mechanism", () => { asyncCalled = true; }; + vi.useFakeTimers(); sessionManager.subscribe(syncListener); sessionManager.subscribe(asyncListener); await sessionManager.setSessionItem(StorageKeys.idToken, "mixedTest"); - // Wait for setTimeout to fire and async listener to complete - // Using 50ms to account for CI variance in setTimeout(0) scheduling overhead - await new Promise((resolve) => setTimeout(resolve, 50)); + await vi.runAllTimersAsync(); + vi.useRealTimers(); expect(syncCalled).toBe(true); expect(asyncCalled).toBe(true); From 104ea0ccf025db797879bef61c71277daa0a06ea Mon Sep 17 00:00:00 2001 From: dtoxvanilla1991 Date: Sat, 25 Apr 2026 00:29:08 +0100 Subject: [PATCH 6/7] fix: correct typo 'handing' -> 'handling' in reauth error message --- lib/utils/generateAuthUrl.test.ts | 4 ++-- lib/utils/generateAuthUrl.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/utils/generateAuthUrl.test.ts b/lib/utils/generateAuthUrl.test.ts index 2040bf92..2374f818 100644 --- a/lib/utils/generateAuthUrl.test.ts +++ b/lib/utils/generateAuthUrl.test.ts @@ -430,7 +430,7 @@ describe("generateAuthUrl", () => { await expect( generateAuthUrl(domain, IssuerRouteTypes.login, options), - ).rejects.toThrow(/Error handing reauth state:/); + ).rejects.toThrow(/Error handling reauth state:/); }); it("invalid reauthState", async () => { @@ -443,7 +443,7 @@ describe("generateAuthUrl", () => { expect(() => generateAuthUrl(domain, IssuerRouteTypes.login, options), ).rejects.toThrow( - /Error handing reauth state: Expected property name or '}' in JSON/, + /Error handling reauth state: Expected property name or '}' in JSON/, ); }); diff --git a/lib/utils/generateAuthUrl.ts b/lib/utils/generateAuthUrl.ts index b915a229..ce25e29a 100644 --- a/lib/utils/generateAuthUrl.ts +++ b/lib/utils/generateAuthUrl.ts @@ -80,7 +80,7 @@ export const generateAuthUrl = async ( } catch (ex: unknown) { const errorDescription = ex instanceof Error ? ex.message : "Unknown error"; - throw new Error(`Error handing reauth state: ${errorDescription}`, { + throw new Error(`Error handling reauth state: ${errorDescription}`, { cause: ex, }); } From 17997e3d51131c8b114a37fad084d49658b20331 Mon Sep 17 00:00:00 2001 From: dtoxvanilla1991 Date: Sat, 25 Apr 2026 00:33:00 +0100 Subject: [PATCH 7/7] fix(test): guarantee timer restoration via afterEach to prevent fake timer leak --- lib/sessionManager/stores/memory.test.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/sessionManager/stores/memory.test.ts b/lib/sessionManager/stores/memory.test.ts index 891fed77..73b57634 100644 --- a/lib/sessionManager/stores/memory.test.ts +++ b/lib/sessionManager/stores/memory.test.ts @@ -1,4 +1,4 @@ -import { describe, it, expect, beforeEach, vi } from "vitest"; +import { describe, it, expect, beforeEach, afterEach, vi } from "vitest"; import { MemoryStorage } from "./memory"; import { StorageKeys } from "../types"; @@ -146,6 +146,10 @@ describe("MemoryStorage subscription/listening mechanism", () => { sessionManager = new MemoryStorage(); }); + afterEach(() => { + vi.useRealTimers(); + }); + it("should call listener when item is set", async () => { let listenerCalled = false; const listener = () => { @@ -266,7 +270,6 @@ describe("MemoryStorage subscription/listening mechanism", () => { await sessionManager.setSessionItem(StorageKeys.idToken, "mixedTest"); await vi.runAllTimersAsync(); - vi.useRealTimers(); expect(syncCalled).toBe(true); expect(asyncCalled).toBe(true);