diff --git a/backend/package.json b/backend/package.json index a64d5f931..7a36cc306 100644 --- a/backend/package.json +++ b/backend/package.json @@ -93,7 +93,7 @@ "readline-sync": "1.4.10", "supertest": "6.2.3", "tsx": "4.16.2", - "typescript": "5.5.3", + "typescript": "5.5.4", "vitest": "1.6.0", "vitest-mongodb": "1.0.0" } diff --git a/backend/src/api/controllers/user.ts b/backend/src/api/controllers/user.ts index 641a8aa2d..11bc33b8e 100644 --- a/backend/src/api/controllers/user.ts +++ b/backend/src/api/controllers/user.ts @@ -87,11 +87,15 @@ export async function sendVerificationEmail( await admin .auth() .getUser(uid) - .catch((e) => { + .catch((e: unknown) => { throw new MonkeyError( 500, // this should never happen, but it does. it mightve been caused by auth token cache, will see if disabling cache fixes it "Auth user not found, even though the token got decoded", - JSON.stringify({ uid, email, stack: e.stack }), + JSON.stringify({ + uid, + email, + stack: e instanceof Error ? e.stack : JSON.stringify(e), + }), uid ); }) diff --git a/backend/src/api/ts-rest-adapter.ts b/backend/src/api/ts-rest-adapter.ts index 77586d6a6..dba79b095 100644 --- a/backend/src/api/ts-rest-adapter.ts +++ b/backend/src/api/ts-rest-adapter.ts @@ -7,6 +7,8 @@ export function callController< TBody, TParams, TResponse, + //ignoring as it might be used in the future + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters TStatus = 200 >( handler: Handler diff --git a/backend/src/dal/user.ts b/backend/src/dal/user.ts index f8277849b..893de43c7 100644 --- a/backend/src/dal/user.ts +++ b/backend/src/dal/user.ts @@ -1004,12 +1004,12 @@ export async function updateInbox( const xpGain = rewards .filter((it) => it.type === "xp") - .map((it) => it.item as number) + .map((it) => it.item) .reduce((s, a) => s + a, 0); const badgesToClaim = rewards .filter((it) => it.type === "badge") - .map((it) => it.item as Badge); + .map((it) => it.item); if (inventory === null) inventory = { diff --git a/backend/src/init/email-client.ts b/backend/src/init/email-client.ts index 942c84456..73a4bcf41 100644 --- a/backend/src/init/email-client.ts +++ b/backend/src/init/email-client.ts @@ -82,10 +82,10 @@ type MailResult = { message: string; }; -export async function sendEmail( +export async function sendEmail( templateName: EmailType, to: string, - data: EmailTaskContexts[M] + data: EmailTaskContexts[EmailType] ): Promise { if (!isInitialized()) { return { diff --git a/backend/src/middlewares/validation.ts b/backend/src/middlewares/validation.ts index 16df432f0..2b3914429 100644 --- a/backend/src/middlewares/validation.ts +++ b/backend/src/middlewares/validation.ts @@ -19,7 +19,7 @@ type ValidationHandlingOptions = { }; type ValidationSchemaOptions = { - [schema in keyof ValidationSchema]?: ValidationSchemaOption; + [_schema in keyof ValidationSchema]?: ValidationSchemaOption; } & ValidationHandlingOptions; const VALIDATION_SCHEMA_DEFAULT_OPTIONS: ValidationSchemaOptions = { diff --git a/backend/src/services/weekly-xp-leaderboard.ts b/backend/src/services/weekly-xp-leaderboard.ts index b965d8de5..8ab2785fc 100644 --- a/backend/src/services/weekly-xp-leaderboard.ts +++ b/backend/src/services/weekly-xp-leaderboard.ts @@ -182,6 +182,7 @@ export class WeeklyXpLeaderboard { const { weeklyXpLeaderboardScoresKey, weeklyXpLeaderboardResultsKey } = this.getThisWeeksXpLeaderboardKeys(); + // eslint-disable-next-line @typescript-eslint/no-unused-expressions connection.set; // eslint-disable-next-line @typescript-eslint/prefer-ts-expect-error diff --git a/backend/src/utils/misc.ts b/backend/src/utils/misc.ts index 1ba942e92..5b91628d2 100644 --- a/backend/src/utils/misc.ts +++ b/backend/src/utils/misc.ts @@ -286,6 +286,7 @@ export function formatSeconds( export function intersect(a: T[], b: T[], removeDuplicates = false): T[] { let t; + // eslint-disable-next-line @typescript-eslint/no-unused-expressions if (b.length > a.length) (t = b), (b = a), (a = t); // indexOf to loop over shorter const filtered = a.filter(function (e) { return b.includes(e); diff --git a/frontend/package.json b/frontend/package.json index b40aa20b8..6805987e2 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -58,7 +58,7 @@ "postcss": "8.4.31", "sass": "1.70.0", "subset-font": "2.3.0", - "typescript": "5.3.3", + "typescript": "5.5.4", "vite": "5.1.7", "vite-bundle-visualizer": "1.0.1", "vite-plugin-checker": "0.6.4", @@ -95,10 +95,5 @@ "stemmer": "2.0.1", "throttle-debounce": "5.0.2", "zod": "3.23.8" - }, - "overrides": { - "madge": { - "@typescript-eslint/typescript-estree": "7.1.0" - } } } diff --git a/frontend/src/ts/commandline/lists.ts b/frontend/src/ts/commandline/lists.ts index a7e21fb15..dd8a9e91f 100644 --- a/frontend/src/ts/commandline/lists.ts +++ b/frontend/src/ts/commandline/lists.ts @@ -110,7 +110,7 @@ layoutsPromise updateLayoutsCommands(layouts); updateKeymapLayoutsCommands(layouts); }) - .catch((e) => { + .catch((e: unknown) => { console.error( Misc.createErrorMessage(e, "Failed to update layouts commands") ); @@ -121,7 +121,7 @@ languagesPromise .then((languages) => { updateLanguagesCommands(languages); }) - .catch((e) => { + .catch((e: unknown) => { console.error( Misc.createErrorMessage(e, "Failed to update language commands") ); @@ -137,7 +137,7 @@ funboxPromise }; } }) - .catch((e) => { + .catch((e: unknown) => { console.error( Misc.createErrorMessage(e, "Failed to update funbox commands") ); @@ -148,7 +148,7 @@ fontsPromise .then((fonts) => { updateFontFamilyCommands(fonts); }) - .catch((e) => { + .catch((e: unknown) => { console.error( Misc.createErrorMessage(e, "Failed to update fonts commands") ); @@ -159,7 +159,7 @@ themesPromise .then((themes) => { updateThemesCommands(themes); }) - .catch((e) => { + .catch((e: unknown) => { console.error( Misc.createErrorMessage(e, "Failed to update themes commands") ); @@ -170,7 +170,7 @@ challengesPromise .then((challenges) => { updateLoadChallengeCommands(challenges); }) - .catch((e) => { + .catch((e: unknown) => { console.error( Misc.createErrorMessage(e, "Failed to update challenges commands") ); @@ -432,7 +432,7 @@ export const commands: MonkeyTypes.CommandsSubgroup = { .then(() => { Notifications.add("Copied to clipboard", 1); }) - .catch((e) => { + .catch((e: unknown) => { Notifications.add("Failed to copy to clipboard: " + e, -1); }); }, diff --git a/frontend/src/ts/commandline/lists/navigation.ts b/frontend/src/ts/commandline/lists/navigation.ts index 9fa9c352d..71b2c1123 100644 --- a/frontend/src/ts/commandline/lists/navigation.ts +++ b/frontend/src/ts/commandline/lists/navigation.ts @@ -45,6 +45,7 @@ const commands: MonkeyTypes.Command[] = [ alias: "navigate go to stats", icon: "fa-user", exec: (): void => { + //todo probably base this on some state instead of the dom $("header nav .textButton.view-account").hasClass("hidden") ? navigate("/login") : navigate("/account"); diff --git a/frontend/src/ts/config.ts b/frontend/src/ts/config.ts index e1e8b2b9a..7f92b705e 100644 --- a/frontend/src/ts/config.ts +++ b/frontend/src/ts/config.ts @@ -16,7 +16,7 @@ import { canSetConfigWithCurrentFunboxes, canSetFunboxWithConfig, } from "./test/funbox/funbox-validation"; -import { isDevEnvironment, reloadAfter } from "./utils/misc"; +import { isDevEnvironment, reloadAfter, typedKeys } from "./utils/misc"; import * as ConfigSchemas from "@monkeytype/contracts/schemas/configs"; import { Config } from "@monkeytype/contracts/schemas/configs"; import { roundTo1 } from "./utils/numbers"; @@ -53,7 +53,8 @@ function saveToLocalStorage( const localToSaveStringified = JSON.stringify(localToSave); window.localStorage.setItem("config", localToSaveStringified); if (!noDbCheck) { - (configToSend[key] as typeof config[typeof key]) = config[key]; + //@ts-expect-error this is fine + configToSend[key] = config[key]; saveToDatabase(); } ConfigEvent.dispatch("saveToLocalStorage", localToSaveStringified); @@ -2193,12 +2194,13 @@ function replaceLegacyValues( export function getConfigChanges(): MonkeyTypes.PresetConfig { const configChanges = {} as MonkeyTypes.PresetConfig; - (Object.keys(config) as (keyof Config)[]) + typedKeys(config) .filter((key) => { return config[key] !== DefaultConfig[key]; }) .forEach((key) => { - (configChanges[key] as typeof config[typeof key]) = config[key]; + //@ts-expect-error this is fine + configChanges[key] = config[key]; }); return configChanges; } diff --git a/frontend/src/ts/controllers/account-controller.ts b/frontend/src/ts/controllers/account-controller.ts index 89c6794d0..d9a74680b 100644 --- a/frontend/src/ts/controllers/account-controller.ts +++ b/frontend/src/ts/controllers/account-controller.ts @@ -45,6 +45,7 @@ import { import * as ConnectionState from "../states/connection"; import { navigate } from "./route-controller"; import { getHtmlByUserFlags } from "./user-flag-controller"; +import { FirebaseError } from "firebase/app"; export const gmailProvider = new GoogleAuthProvider(); export const githubProvider = new GithubAuthProvider(); @@ -85,30 +86,33 @@ async function getDataAndInit(): Promise { await LoadingPage.showBar(); await DB.initSnapshot(); } catch (error) { - const e = error as { message: string; responseCode: number }; + console.error(error); AccountButton.loading(false); - if (e.responseCode === 429) { - Notifications.add( - "Doing so will save you bandwidth, make the next test be ready faster and will not sign you out (which could mean your new personal best would not save to your account).", - 0, - { - duration: 0, - } - ); - Notifications.add( - "You will run into this error if you refresh the website to restart the test. It is NOT recommended to do that. Instead, use tab + enter or just tab (with quick tab mode enabled) to restart the test.", - 0, - { - duration: 0, - } - ); - } - const msg = e.message || "Unknown error"; - Notifications.add("Failed to get user data: " + msg, -1); - console.error(e); - LoginPage.enableInputs(); $("header nav .account").css("opacity", 1); + if (error instanceof DB.SnapshotInitError) { + if (error.responseCode === 429) { + Notifications.add( + "Doing so will save you bandwidth, make the next test be ready faster and will not sign you out (which could mean your new personal best would not save to your account).", + 0, + { + duration: 0, + } + ); + Notifications.add( + "You will run into this error if you refresh the website to restart the test. It is NOT recommended to do that. Instead, use tab + enter or just tab (with quick tab mode enabled) to restart the test.", + 0, + { + duration: 0, + } + ); + } + + Notifications.add("Failed to get user data: " + error.message, -1); + } else { + const message = Misc.createErrorMessage(error, "Failed to get user data"); + Notifications.add(message, -1); + } return false; } if (ActivePage.get() === "loading") { @@ -138,7 +142,7 @@ async function getDataAndInit(): Promise { // filters = defaultResultFilters; void ResultFilters.load(); }) - .catch((e) => { + .catch((e: unknown) => { console.log( Misc.createErrorMessage( e, @@ -300,19 +304,24 @@ export async function signIn(email: string, password: string): Promise { .then(async (e) => { await loadUser(e.user); }) - .catch(function (error) { + .catch(function (error: unknown) { console.error(error); - let message = error.message; - if (error.code === "auth/wrong-password") { - message = "Incorrect password"; - } else if (error.code === "auth/user-not-found") { - message = "User not found"; - } else if (error.code === "auth/invalid-email") { - message = - "Invalid email format (make sure you are using your email to login - not your username)"; - } else if (error.code === "auth/invalid-credential") { - message = - "Email/password is incorrect or your account does not have password authentication enabled."; + let message = Misc.createErrorMessage( + error, + "Failed to sign in with email and password" + ); + if (error instanceof FirebaseError) { + if (error.code === "auth/wrong-password") { + message = "Incorrect password"; + } else if (error.code === "auth/user-not-found") { + message = "User not found"; + } else if (error.code === "auth/invalid-email") { + message = + "Invalid email format (make sure you are using your email to login - not your username)"; + } else if (error.code === "auth/invalid-credential") { + message = + "Email/password is incorrect or your account does not have password authentication enabled."; + } } Notifications.add(message, -1); LoginPage.hidePreloader(); @@ -354,32 +363,37 @@ async function signInWithProvider(provider: AuthProvider): Promise { await loadUser(signedInUser.user); } }) - .catch((error) => { + .catch((error: unknown) => { console.log(error); - let message = error.message; - if (error.code === "auth/wrong-password") { - message = "Incorrect password"; - } else if (error.code === "auth/user-not-found") { - message = "User not found"; - } else if (error.code === "auth/invalid-email") { - message = - "Invalid email format (make sure you are using your email to login - not your username)"; - } else if (error.code === "auth/popup-closed-by-user") { - message = ""; - // message = "Popup closed by user"; - // return; - } else if (error.code === "auth/popup-blocked") { - message = - "Sign in popup was blocked by the browser. Check the address bar for a blocked popup icon, or update your browser settings to allow popups."; - } else if (error.code === "auth/user-cancelled") { - message = ""; - // message = "User refused to sign in"; - // return; - } else if ( - error.code === "auth/account-exists-with-different-credential" - ) { - message = - "Account already exists, but its using a different authentication method. Try signing in with a different method"; + let message = Misc.createErrorMessage( + error, + "Failed to sign in with popup" + ); + if (error instanceof FirebaseError) { + if (error.code === "auth/wrong-password") { + message = "Incorrect password"; + } else if (error.code === "auth/user-not-found") { + message = "User not found"; + } else if (error.code === "auth/invalid-email") { + message = + "Invalid email format (make sure you are using your email to login - not your username)"; + } else if (error.code === "auth/popup-closed-by-user") { + message = ""; + // message = "Popup closed by user"; + // return; + } else if (error.code === "auth/popup-blocked") { + message = + "Sign in popup was blocked by the browser. Check the address bar for a blocked popup icon, or update your browser settings to allow popups."; + } else if (error.code === "auth/user-cancelled") { + message = ""; + // message = "User refused to sign in"; + // return; + } else if ( + error.code === "auth/account-exists-with-different-credential" + ) { + message = + "Account already exists, but its using a different authentication method. Try signing in with a different method"; + } } if (message !== "") { Notifications.add(message, -1); @@ -430,12 +444,13 @@ async function addAuthProvider( Notifications.add(`${providerName} authentication added`, 1); Settings.updateAuthSections(); }) - .catch(function (error) { + .catch(function (error: unknown) { Loader.hide(); - Notifications.add( - `Failed to add ${providerName} authentication: ` + error.message, - -1 + const message = Misc.createErrorMessage( + error, + `Failed to add ${providerName} authentication` ); + Notifications.add(message, -1); }); } @@ -461,8 +476,9 @@ export function signOut(): void { hideFavoriteQuoteLength(); }, 125); }) - .catch(function (error) { - Notifications.add(error.message, -1); + .catch(function (error: unknown) { + const message = Misc.createErrorMessage(error, `Failed to sign out`); + Notifications.add(message, -1); }); } diff --git a/frontend/src/ts/controllers/input-controller.ts b/frontend/src/ts/controllers/input-controller.ts index e0365fcb4..0a2715ab7 100644 --- a/frontend/src/ts/controllers/input-controller.ts +++ b/frontend/src/ts/controllers/input-controller.ts @@ -79,9 +79,7 @@ function updateUI(): void { ); const inputGroupLength: number = koCurrInput.length - 1; if (koCurrInput[inputGroupLength]) { - const inputCharLength: number = ( - koCurrInput[inputGroupLength] as string[] - ).length; + const inputCharLength: number = koCurrInput[inputGroupLength].length; //at the end of the word, it will throw a (reading '0') this will be the space try { //if it overflows and returns undefined (e.g input [ㄱ,ㅏ,ㄷ]), diff --git a/frontend/src/ts/db.ts b/frontend/src/ts/db.ts index 01d9a4104..39356c8f0 100644 --- a/frontend/src/ts/db.ts +++ b/frontend/src/ts/db.ts @@ -26,6 +26,14 @@ import { let dbSnapshot: MonkeyTypes.Snapshot | undefined; +export class SnapshotInitError extends Error { + constructor(message: string, public responseCode: number) { + super(message); + this.name = "SnapshotInitError"; + this.responseCode = responseCode; + } +} + export function getSnapshot(): MonkeyTypes.Snapshot | undefined { return dbSnapshot; } @@ -75,27 +83,23 @@ export async function initSnapshot(): Promise< Ape.presets.get(), ]); - //these objects are explicitly handled so its ok to throw that way if (userResponse.status !== 200) { - // eslint-disable-next-line @typescript-eslint/no-throw-literal - throw { - message: `${userResponse.message} (user)`, - responseCode: userResponse.status, - }; + throw new SnapshotInitError( + `${userResponse.message} (user)`, + userResponse.status + ); } if (configResponse.status !== 200) { - // eslint-disable-next-line @typescript-eslint/no-throw-literal - throw { - message: `${configResponse.body.message} (config)`, - responseCode: configResponse.status, - }; + throw new SnapshotInitError( + `${configResponse.body.message} (config)`, + configResponse.status + ); } if (presetsResponse.status !== 200) { - // eslint-disable-next-line @typescript-eslint/no-throw-literal - throw { - message: `${presetsResponse.body.message} (presets)`, - responseCode: presetsResponse.status, - }; + throw new SnapshotInitError( + `${presetsResponse.body.message} (presets)`, + presetsResponse.status + ); } const userData = userResponse.data; @@ -103,11 +107,10 @@ export async function initSnapshot(): Promise< const presetsData = presetsResponse.body.data; if (userData === null) { - // eslint-disable-next-line @typescript-eslint/no-throw-literal - throw { - message: "Request was successful but user data is null", - responseCode: 200, - }; + throw new SnapshotInitError( + `Request was successful but user data is null`, + 200 + ); } if (configData !== null && "config" in configData) { @@ -890,7 +893,7 @@ export async function updateLbMemory( api = false ): Promise { if (mode === "time") { - const timeMode = mode as "time"; + const timeMode = mode; const timeMode2 = mode2 as "15" | "60"; const snapshot = getSnapshot(); @@ -912,10 +915,7 @@ export async function updateLbMemory( const current = snapshot.lbMemory?.[timeMode]?.[timeMode2]?.[language]; //this is protected above so not sure why it would be undefined - const mem = snapshot.lbMemory[timeMode][timeMode2] as Record< - string, - number - >; + const mem = snapshot.lbMemory[timeMode][timeMode2]; mem[language] = rank; if (api && current !== rank) { await Ape.users.updateLeaderboardMemory(mode, mode2, language, rank); diff --git a/frontend/src/ts/elements/account/result-filters.ts b/frontend/src/ts/elements/account/result-filters.ts index 29d378ea0..0f89864fc 100644 --- a/frontend/src/ts/elements/account/result-filters.ts +++ b/frontend/src/ts/elements/account/result-filters.ts @@ -145,7 +145,7 @@ export async function load(): Promise { Object.keys(defaultResultFilters.tags).forEach((tag) => { if (filters.tags[tag] !== undefined) { - newTags[tag] = filters.tags[tag] as boolean; + newTags[tag] = filters.tags[tag]; } else { newTags[tag] = true; } diff --git a/frontend/src/ts/elements/leaderboards.ts b/frontend/src/ts/elements/leaderboards.ts index ff9bb192a..20c91578f 100644 --- a/frontend/src/ts/elements/leaderboards.ts +++ b/frontend/src/ts/elements/leaderboards.ts @@ -28,21 +28,21 @@ let showingYesterday = false; type LbKey = "15" | "60"; let currentData: { - [key in LbKey]: LeaderboardEntry[]; + [_key in LbKey]: LeaderboardEntry[]; } = { "15": [], "60": [], }; let currentRank: { - [key in LbKey]: Ape.Leaderboards.GetRank | Record; + [_key in LbKey]: Ape.Leaderboards.GetRank | Record; } = { "15": {}, "60": {}, }; let currentAvatars: { - [key in LbKey]: (string | null)[]; + [_key in LbKey]: (string | null)[]; } = { "15": [], "60": [], diff --git a/frontend/src/ts/elements/settings/settings-group.ts b/frontend/src/ts/elements/settings/settings-group.ts index fc45317da..f9422b610 100644 --- a/frontend/src/ts/elements/settings/settings-group.ts +++ b/frontend/src/ts/elements/settings/settings-group.ts @@ -120,6 +120,7 @@ export default class SettingsGroup { select.value = this.configValue as string; //@ts-expect-error + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion const ss = select.slim as SlimSelect | undefined; ss?.store.setSelectedBy("value", [this.configValue as string]); ss?.render.renderValues(); diff --git a/frontend/src/ts/elements/test-activity-calendar.ts b/frontend/src/ts/elements/test-activity-calendar.ts index 217b99116..95b3f08d2 100644 --- a/frontend/src/ts/elements/test-activity-calendar.ts +++ b/frontend/src/ts/elements/test-activity-calendar.ts @@ -157,9 +157,7 @@ export class TestActivityCalendar implements MonkeyTypes.TestActivityCalendar { } private getBuckets(): number[] { - const filtered = this.data.filter( - (it) => it !== null && it !== undefined - ) as number[]; + const filtered = this.data.filter((it) => it !== null && it !== undefined); const sorted = filtered.sort((a, b) => a - b); const trimmed = sorted.slice( diff --git a/frontend/src/ts/modals/version-history.ts b/frontend/src/ts/modals/version-history.ts index d5c89c7cb..3df9b29fc 100644 --- a/frontend/src/ts/modals/version-history.ts +++ b/frontend/src/ts/modals/version-history.ts @@ -1,6 +1,7 @@ import { format } from "date-fns/format"; import { getReleasesFromGitHub } from "../utils/json-data"; import AnimatedModal from "../utils/animated-modal"; +import { createErrorMessage } from "../utils/misc"; export function show(): void { void modal.show({ @@ -44,9 +45,10 @@ export function show(): void { } }); }) - .catch((e) => { + .catch((e: unknown) => { + const msg = createErrorMessage(e, "Failed to fetch version history"); $("#versionHistoryModal .modal").html( - `
Failed to fetch version history:
${e.message}Failed to fetch version history:
${msg} { last10++; wpmLast10total += result.wpm; totalAcc10 += result.acc; - result.consistency !== undefined - ? (totalCons10 += result.consistency) - : 0; + if (result.consistency !== undefined) { + totalCons10 += result.consistency; + } } testCount++; @@ -624,7 +624,7 @@ async function fillContent(): Promise { acc: result.acc, mode: result.mode, mode2: result.mode2, - punctuation: result.punctuation as boolean, + punctuation: result.punctuation, language: result.language, timestamp: result.timestamp, difficulty: result.difficulty, diff --git a/frontend/src/ts/pages/settings.ts b/frontend/src/ts/pages/settings.ts index 306fcf549..0fc042fb2 100644 --- a/frontend/src/ts/pages/settings.ts +++ b/frontend/src/ts/pages/settings.ts @@ -846,8 +846,12 @@ function setActiveFunboxButton(): void { } }); }) - .catch((e) => { - Notifications.add(`Failed to update funbox buttons: ${e.message}`, -1); + .catch((e: unknown) => { + const message = Misc.createErrorMessage( + e, + "Failed to update funbox buttons" + ); + Notifications.add(message, -1); }); Config.funbox.split("#").forEach((funbox) => { $( @@ -1411,10 +1415,12 @@ $( $(".pageSettings .quickNav .links a").on("click", (e) => { const settingsGroup = e.target.innerText; - const isOpen = $(`.pageSettings .settingsGroup.${settingsGroup}`).hasClass( + const isClosed = $(`.pageSettings .settingsGroup.${settingsGroup}`).hasClass( "slideup" ); - isOpen && toggleSettingsGroup(settingsGroup); + if (isClosed) { + toggleSettingsGroup(settingsGroup); + } }); $(".pageSettings .section.discordIntegration .getLinkAndGoToOauth").on( diff --git a/frontend/src/ts/test/funbox/funbox-validation.ts b/frontend/src/ts/test/funbox/funbox-validation.ts index a46613169..11dfac309 100644 --- a/frontend/src/ts/test/funbox/funbox-validation.ts +++ b/frontend/src/ts/test/funbox/funbox-validation.ts @@ -44,7 +44,7 @@ export function checkFunboxForcedConfigs( forcedConfigs[key] = fb.forcedConfig[key] as ConfigValue[]; } else { forcedConfigs[key] = Arrays.intersect( - forcedConfigs[key] as ConfigValue[], + forcedConfigs[key], fb.forcedConfig[key] as ConfigValue[], true ); @@ -61,7 +61,7 @@ export function checkFunboxForcedConfigs( throw new Error("No intersection of forced configs"); } return { - result: (forcedConfigs[key] ?? []).includes(value as ConfigValue), + result: (forcedConfigs[key] ?? []).includes(value), forcedConfigs: forcedConfigs[key], }; } @@ -303,7 +303,7 @@ export function areFunboxesCompatible( if (allowedConfig[key]) { if ( Arrays.intersect( - allowedConfig[key] as ConfigValue[], + allowedConfig[key], f.forcedConfig[key] as ConfigValue[], true ).length === 0 diff --git a/frontend/src/ts/test/pace-caret.ts b/frontend/src/ts/test/pace-caret.ts index cfb996e4e..29a6fab97 100644 --- a/frontend/src/ts/test/pace-caret.ts +++ b/frontend/src/ts/test/pace-caret.ts @@ -236,7 +236,6 @@ export async function update(expectedStepEnd: number): Promise { word.offsetTop + currentLetter.offsetTop - Config.fontSize * Numbers.convertRemToPixels(1) * 0.1; - newLeft; if (settings.currentLetterIndex === -1) { newLeft = word.offsetLeft + diff --git a/frontend/src/ts/test/result.ts b/frontend/src/ts/test/result.ts index 34450e07f..2193e6850 100644 --- a/frontend/src/ts/test/result.ts +++ b/frontend/src/ts/test/result.ts @@ -777,7 +777,7 @@ export function updateRateQuote(randomQuote: MonkeyTypes.Quote | null): void { quoteStats?.average?.toFixed(1) ?? "" ); }) - .catch((e) => { + .catch((e: unknown) => { $(".pageTest #result #rateQuoteButton .rating").text("?"); }); $(".pageTest #result #rateQuoteButton") @@ -1010,7 +1010,7 @@ export function updateTagsAfterEdit( tagIds.forEach((tag, index) => { if (checked.includes(tag)) return; - if (tagPbIds.includes(tag) as boolean) { + if (tagPbIds.includes(tag)) { html += `
${tagNames[index]}
`; } else { html += `
${tagNames[index]}
`; diff --git a/frontend/src/ts/test/test-input.ts b/frontend/src/ts/test/test-input.ts index 1a03a00e3..540facc0b 100644 --- a/frontend/src/ts/test/test-input.ts +++ b/frontend/src/ts/test/test-input.ts @@ -414,7 +414,7 @@ export function pushMissedWord(word: string): void { if (!Object.keys(missedWords).includes(word)) { missedWords[word] = 1; } else { - missedWords[word]++; + (missedWords[word] as number)++; } } diff --git a/frontend/src/ts/test/test-ui.ts b/frontend/src/ts/test/test-ui.ts index dda24feb6..1c77cd17a 100644 --- a/frontend/src/ts/test/test-ui.ts +++ b/frontend/src/ts/test/test-ui.ts @@ -152,7 +152,7 @@ ConfigEvent.subscribe((eventKey, eventValue, nosave) => { void updateWordsInputPosition(true); } if (eventKey === "fontSize" || eventKey === "fontFamily") - updateHintsPosition().catch((e) => { + updateHintsPosition().catch((e: unknown) => { console.error(e); }); diff --git a/frontend/src/ts/types/types.d.ts b/frontend/src/ts/types/types.d.ts index 9933dd64d..a44320cbf 100644 --- a/frontend/src/ts/types/types.d.ts +++ b/frontend/src/ts/types/types.d.ts @@ -198,13 +198,13 @@ declare namespace MonkeyTypes { type LeaderboardMemory = { time: { - [key in "15" | "60"]: Record; + [_key in "15" | "60"]: Record; }; }; type Leaderboards = { time: { - [key in 15 | 60]: import("@monkeytype/shared-types").LeaderboardEntry[]; + [_key in 15 | 60]: import("@monkeytype/shared-types").LeaderboardEntry[]; }; }; diff --git a/frontend/src/ts/utils/arrays.ts b/frontend/src/ts/utils/arrays.ts index 1dec3ce0d..b7b857ab4 100644 --- a/frontend/src/ts/utils/arrays.ts +++ b/frontend/src/ts/utils/arrays.ts @@ -108,6 +108,7 @@ export function nthElementFromArray( */ export function intersect(a: T[], b: T[], removeDuplicates = false): T[] { let t; + // eslint-disable-next-line @typescript-eslint/no-unused-expressions if (b.length > a.length) (t = b), (b = a), (a = t); // indexOf to loop over shorter const filtered = a.filter(function (e) { return b.includes(e); diff --git a/frontend/src/ts/utils/ip-addresses.ts b/frontend/src/ts/utils/ip-addresses.ts index a4678dfd1..c147d339d 100644 --- a/frontend/src/ts/utils/ip-addresses.ts +++ b/frontend/src/ts/utils/ip-addresses.ts @@ -36,7 +36,7 @@ function getIPCidr( bitsLeft -= b; if (bitsLeft < 0) { if (-bitsLeft <= b) { - addr[i] &= (2 ** b - 1) ^ (2 ** -bitsLeft - 1); + (addr[i] as number) &= (2 ** b - 1) ^ (2 ** -bitsLeft - 1); } else { addr[i] = 0; } diff --git a/frontend/src/ts/utils/misc.ts b/frontend/src/ts/utils/misc.ts index 0e42c2bdd..2e2939b4e 100644 --- a/frontend/src/ts/utils/misc.ts +++ b/frontend/src/ts/utils/misc.ts @@ -484,13 +484,16 @@ export function createErrorMessage(error: unknown, message: string): string { return `${message}: ${error.message}`; } - const objectWithMessage = error as { message?: string }; + if (error instanceof Object && "message" in error) { + const objectWithMessage = error as { message?: string }; - if (objectWithMessage?.message !== undefined) { - return `${message}: ${objectWithMessage.message}`; + if (objectWithMessage?.message !== undefined) { + return `${message}: ${objectWithMessage.message}`; + } } - return message; + console.error("Unknown error", error); + return `${message}: Unknown error`; } export function isElementVisible(query: string): boolean { diff --git a/frontend/src/ts/utils/search-service.ts b/frontend/src/ts/utils/search-service.ts index 2638431ef..ea0cfe064 100644 --- a/frontend/src/ts/utils/search-service.ts +++ b/frontend/src/ts/utils/search-service.ts @@ -98,7 +98,7 @@ export const buildSearchService = ( internalDocument.termFrequencies[stemmedToken] = 0; } - internalDocument.termFrequencies[stemmedToken]++; + (internalDocument.termFrequencies[stemmedToken] as number)++; maxTermFrequency = Math.max( maxTermFrequency, internalDocument.termFrequencies[stemmedToken] as number diff --git a/frontend/src/ts/utils/url-handler.ts b/frontend/src/ts/utils/url-handler.ts index a4386219f..ea87ac2bc 100644 --- a/frontend/src/ts/utils/url-handler.ts +++ b/frontend/src/ts/utils/url-handler.ts @@ -218,7 +218,7 @@ export function loadChallengeFromUrl(getOverride?: string): void { }); } }) - .catch((e) => { + .catch((e: unknown) => { Notifications.add("Failed to load challenge", -1); console.error(e); }); diff --git a/package.json b/package.json index 5ea68b2f1..30a4b388d 100644 --- a/package.json +++ b/package.json @@ -56,8 +56,6 @@ "devDependencies": { "@commitlint/cli": "17.7.1", "@commitlint/config-conventional": "17.7.0", - "@typescript-eslint/eslint-plugin": "7.1.0", - "@typescript-eslint/parser": "7.1.0", "conventional-changelog": "4.0.0", "eslint": "8.57.0", "eslint-config-prettier": "9.0.0", @@ -72,7 +70,7 @@ "prettier": "2.5.1", "readline-sync": "1.4.10", "turbo": "2.0.9", - "typescript": "5.3.3", + "typescript": "5.5.4", "wait-for-localhost-cli": "3.2.0" }, "lint-staged": { diff --git a/packages/contracts/package.json b/packages/contracts/package.json index fcdbbbc76..96203b36a 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -20,7 +20,7 @@ "eslint": "8.57.0", "madge": "6.1.0", "rimraf": "6.0.1", - "typescript": "5.5.3" + "typescript": "5.5.4" }, "exports": { ".": { diff --git a/packages/eslint-config/index.js b/packages/eslint-config/index.js index 1d39aae7e..f757881ea 100644 --- a/packages/eslint-config/index.js +++ b/packages/eslint-config/index.js @@ -63,7 +63,7 @@ module.exports = { "@typescript-eslint/require-await": "off", "@typescript-eslint/unbound-method": "off", "@typescript-eslint/await-thenable": "off", - "@typescript-eslint/no-useless-template-literals": "off", + "@typescript-eslint/no-unnecessary-template-expression": "off", "@typescript-eslint/prefer-promise-reject-errors": "off", "@typescript-eslint/no-this-alias": "off", "@typescript-eslint/no-unnecessary-type-arguments": "off", @@ -88,7 +88,17 @@ module.exports = { "@typescript-eslint/no-empty-function": "warn", "@typescript-eslint/no-unused-vars": [ "warn", - { argsIgnorePattern: "^(_|e|event)", varsIgnorePattern: "^_" }, + { + argsIgnorePattern: "^(_|e|event)", + caughtErrorsIgnorePattern: "^(_|e|error)", + varsIgnorePattern: "^_", + }, + ], + "@typescript-eslint/no-unused-expressions": [ + "error", + { + allowTernary: true, + }, ], "@typescript-eslint/no-var-requires": "error", "@typescript-eslint/no-this-alias": "off", diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index 8e98b6c6d..52745214f 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -2,8 +2,8 @@ "name": "@monkeytype/eslint-config", "private": true, "devDependencies": { - "@typescript-eslint/eslint-plugin": "7.1.0", - "@typescript-eslint/parser": "7.1.0", + "@typescript-eslint/eslint-plugin": "8.0.1", + "@typescript-eslint/parser": "8.0.1", "eslint-config-prettier": "9.1.0" } } diff --git a/packages/shared-types/package.json b/packages/shared-types/package.json index 7170e0606..1377c2641 100644 --- a/packages/shared-types/package.json +++ b/packages/shared-types/package.json @@ -14,7 +14,7 @@ "@monkeytype/eslint-config": "workspace:*", "@monkeytype/typescript-config": "workspace:*", "rimraf": "6.0.1", - "typescript": "5.5.3", + "typescript": "5.5.4", "eslint": "8.57.0" }, "exports": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b476515f2..2eb2832a2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,12 +14,6 @@ importers: '@commitlint/config-conventional': specifier: 17.7.0 version: 17.7.0 - '@typescript-eslint/eslint-plugin': - specifier: 7.1.0 - version: 7.1.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/parser': - specifier: 7.1.0 - version: 7.1.0(eslint@8.57.0)(typescript@5.3.3) conventional-changelog: specifier: 4.0.0 version: 4.0.0 @@ -31,10 +25,10 @@ importers: version: 9.0.0(eslint@8.57.0) eslint-import-resolver-typescript: specifier: 3.6.1 - version: 3.6.1(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.29.0)(eslint@8.57.0) + version: 3.6.1(eslint-plugin-import@2.29.0)(eslint@8.57.0) eslint-plugin-import: specifier: 2.29.0 - version: 2.29.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + version: 2.29.0(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-json: specifier: 2.1.2 version: 2.1.2 @@ -63,8 +57,8 @@ importers: specifier: 2.0.9 version: 2.0.9 typescript: - specifier: 5.3.3 - version: 5.3.3 + specifier: 5.5.4 + version: 5.5.4 wait-for-localhost-cli: specifier: 3.2.0 version: 3.2.0 @@ -280,8 +274,8 @@ importers: specifier: 4.16.2 version: 4.16.2 typescript: - specifier: 5.5.3 - version: 5.5.3 + specifier: 5.5.4 + version: 5.5.4 vitest: specifier: 1.6.0 version: 1.6.0(@types/node@20.14.11)(happy-dom@13.4.1)(sass@1.70.0)(terser@5.31.3) @@ -444,7 +438,7 @@ importers: version: 13.4.1 madge: specifier: 6.1.0 - version: 6.1.0(typescript@5.3.3) + version: 6.1.0(typescript@5.5.4) normalize.css: specifier: 8.0.1 version: 8.0.1 @@ -458,8 +452,8 @@ importers: specifier: 2.3.0 version: 2.3.0 typescript: - specifier: 5.3.3 - version: 5.3.3 + specifier: 5.5.4 + version: 5.5.4 vite: specifier: 5.1.7 version: 5.1.7(@types/node@20.14.11)(sass@1.70.0)(terser@5.31.3) @@ -468,7 +462,7 @@ importers: version: 1.0.1(rollup@2.79.1) vite-plugin-checker: specifier: 0.6.4 - version: 0.6.4(eslint@8.57.0)(optionator@0.9.4)(typescript@5.3.3)(vite@5.1.7(@types/node@20.14.11)(sass@1.70.0)(terser@5.31.3)) + version: 0.6.4(eslint@8.57.0)(optionator@0.9.4)(typescript@5.5.4)(vite@5.1.7(@types/node@20.14.11)(sass@1.70.0)(terser@5.31.3)) vite-plugin-filter-replace: specifier: 0.1.13 version: 0.1.13 @@ -511,22 +505,22 @@ importers: version: 8.57.0 madge: specifier: 6.1.0 - version: 6.1.0(typescript@5.5.3) + version: 6.1.0(typescript@5.5.4) rimraf: specifier: 6.0.1 version: 6.0.1 typescript: - specifier: 5.5.3 - version: 5.5.3 + specifier: 5.5.4 + version: 5.5.4 packages/eslint-config: devDependencies: '@typescript-eslint/eslint-plugin': - specifier: 7.1.0 - version: 7.1.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3) + specifier: 8.0.1 + version: 8.0.1(@typescript-eslint/parser@8.0.1(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/parser': - specifier: 7.1.0 - version: 7.1.0(eslint@8.57.0)(typescript@5.5.3) + specifier: 8.0.1 + version: 8.0.1(eslint@8.57.0)(typescript@5.5.4) eslint-config-prettier: specifier: 9.1.0 version: 9.1.0(eslint@8.57.0) @@ -550,8 +544,8 @@ importers: specifier: 6.0.1 version: 6.0.1 typescript: - specifier: 5.5.3 - version: 5.5.3 + specifier: 5.5.4 + version: 5.5.4 packages/typescript-config: {} @@ -2587,9 +2581,6 @@ packages: '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - '@types/semver@7.5.8': - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - '@types/send@0.17.4': resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} @@ -2647,36 +2638,35 @@ packages: '@types/whatwg-url@8.2.2': resolution: {integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==} - '@typescript-eslint/eslint-plugin@7.1.0': - resolution: {integrity: sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/eslint-plugin@8.0.1': + resolution: {integrity: sha512-5g3Y7GDFsJAnY4Yhvk8sZtFfV6YNF2caLzjrRPUBzewjPCaj0yokePB4LJSobyCzGMzjZZYFbwuzbfDHlimXbQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/parser@7.1.0': - resolution: {integrity: sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/parser@8.0.1': + resolution: {integrity: sha512-5IgYJ9EO/12pOUwiBKFkpU7rS3IU21mtXzB81TNwq2xEybcmAZrE9qwDtsb5uQd9aVO9o0fdabFyAmKveXyujg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/scope-manager@7.1.0': - resolution: {integrity: sha512-6TmN4OJiohHfoOdGZ3huuLhpiUgOGTpgXNUPJgeZOZR3DnIpdSgtt83RS35OYNNXxM4TScVlpVKC9jyQSETR1A==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/scope-manager@8.0.1': + resolution: {integrity: sha512-NpixInP5dm7uukMiRyiHjRKkom5RIFA4dfiHvalanD2cF0CLUuQqxfg8PtEUo9yqJI2bBhF+pcSafqnG3UBnRQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@7.1.0': - resolution: {integrity: sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/type-utils@8.0.1': + resolution: {integrity: sha512-+/UT25MWvXeDX9YaHv1IS6KI1fiuTto43WprE7pgSMswHbn1Jm9GEM4Txp+X74ifOWV8emu2AWcbLhpJAvD5Ng==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: @@ -2690,9 +2680,9 @@ packages: resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/types@7.1.0': - resolution: {integrity: sha512-qTWjWieJ1tRJkxgZYXx6WUYtWlBc48YRxgY2JN1aGeVpkhmnopq+SUC8UEVGNXIvWH7XyuTjwALfG6bFEgCkQA==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/types@8.0.1': + resolution: {integrity: sha512-PpqTVT3yCA/bIgJ12czBuE3iBlM3g4inRSC5J0QOdQFAn07TYrYEQBBKgXH1lQpglup+Zy6c1fxuwTk4MTNKIw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@4.33.0': resolution: {integrity: sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==} @@ -2712,20 +2702,20 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@7.1.0': - resolution: {integrity: sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/typescript-estree@8.0.1': + resolution: {integrity: sha512-8V9hriRvZQXPWU3bbiUV4Epo7EvgM6RTs+sUmxp5G//dBGy402S7Fx0W0QkB2fb4obCF8SInoUzvTYtc3bkb5w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/utils@7.1.0': - resolution: {integrity: sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/utils@8.0.1': + resolution: {integrity: sha512-CBFR0G0sCt0+fzfnKaciu9IBsKvEKYwN9UZ+eeogK1fYHg4Qxk1yf/wLQkLXlq8wbU2dFlgAesxt8Gi76E8RTA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 '@typescript-eslint/visitor-keys@4.33.0': resolution: {integrity: sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==} @@ -2735,9 +2725,9 @@ packages: resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/visitor-keys@7.1.0': - resolution: {integrity: sha512-FhUqNWluiGNzlvnDZiXad4mZRhtghdoKW6e98GoEOYSu5cND+E39rG5KwJMUzeENwm1ztYBRqof8wMLP+wNPIA==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/visitor-keys@8.0.1': + resolution: {integrity: sha512-W5E+o0UfUcK5EgchLZsyVWqARmsM7v54/qEq6PY3YI5arkgmCzHiuk0zKSJJbm71V0xdRna4BGomkCTXz2/LkQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} @@ -4196,8 +4186,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.4: - resolution: {integrity: sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==} + electron-to-chromium@1.5.5: + resolution: {integrity: sha512-QR7/A7ZkMS8tZuoftC/jfqNkZLQO779SSW3YuZHP4eXpj3EffGLFcB/Xu9AAZQzLccTiCV+EmUo3ha4mQ9wnlA==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -6382,10 +6372,6 @@ packages: resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -8849,13 +8835,8 @@ packages: engines: {node: '>=4.2.0'} hasBin: true - typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - - typescript@5.5.3: - resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==} + typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true @@ -10403,14 +10384,14 @@ snapshots: '@commitlint/types': 17.8.1 '@types/node': 20.5.1 chalk: 4.1.2 - cosmiconfig: 8.3.6(typescript@5.5.3) - cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.5.3))(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.5.3))(typescript@5.5.3) + cosmiconfig: 8.3.6(typescript@5.5.4) + cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.5.4))(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.5.4))(typescript@5.5.4) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.5.3) - typescript: 5.5.3 + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -11860,8 +11841,6 @@ snapshots: '@types/resolve@1.20.2': {} - '@types/semver@7.5.8': {} - '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 @@ -11933,106 +11912,59 @@ snapshots: '@types/node': 20.14.11 '@types/webidl-conversions': 7.0.3 - '@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3)': + '@typescript-eslint/eslint-plugin@8.0.1(@typescript-eslint/parser@8.0.1(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)': dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 7.1.0 - debug: 4.3.6(supports-color@5.5.0) + '@typescript-eslint/parser': 8.0.1(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/scope-manager': 8.0.1 + '@typescript-eslint/type-utils': 8.0.1(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 8.0.1(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.0.1 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.3.3) + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: - typescript: 5.3.3 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/parser@8.0.1(eslint@8.57.0)(typescript@5.5.4)': dependencies: - '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/visitor-keys': 7.1.0 + '@typescript-eslint/scope-manager': 8.0.1 + '@typescript-eslint/types': 8.0.1 + '@typescript-eslint/typescript-estree': 8.0.1(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.0.1 debug: 4.3.6(supports-color@5.5.0) eslint: 8.57.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.3) optionalDependencies: - typescript: 5.5.3 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3)': + '@typescript-eslint/scope-manager@8.0.1': dependencies: - '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 7.1.0 - debug: 4.3.6(supports-color@5.5.0) - eslint: 8.57.0 - optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color + '@typescript-eslint/types': 8.0.1 + '@typescript-eslint/visitor-keys': 8.0.1 - '@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/type-utils@8.0.1(eslint@8.57.0)(typescript@5.5.4)': dependencies: - '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.5.3) - '@typescript-eslint/visitor-keys': 7.1.0 + '@typescript-eslint/typescript-estree': 8.0.1(typescript@5.5.4) + '@typescript-eslint/utils': 8.0.1(eslint@8.57.0)(typescript@5.5.4) debug: 4.3.6(supports-color@5.5.0) - eslint: 8.57.0 + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: - typescript: 5.5.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@7.1.0': - dependencies: - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/visitor-keys': 7.1.0 - - '@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - debug: 4.3.6(supports-color@5.5.0) - eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.3.3) - optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.5.3)': - dependencies: - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.5.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.5.3) - debug: 4.3.6(supports-color@5.5.0) - eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.5.3) - optionalDependencies: - typescript: 5.5.3 + typescript: 5.5.4 transitivePeerDependencies: + - eslint - supports-color '@typescript-eslint/types@4.33.0': {} '@typescript-eslint/types@5.62.0': {} - '@typescript-eslint/types@7.1.0': {} + '@typescript-eslint/types@8.0.1': {} '@typescript-eslint/typescript-estree@4.33.0(typescript@3.9.10)': dependencies: @@ -12062,60 +11994,28 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.1.0(typescript@5.3.3)': + '@typescript-eslint/typescript-estree@8.0.1(typescript@5.5.4)': dependencies: - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/visitor-keys': 7.1.0 + '@typescript-eslint/types': 8.0.1 + '@typescript-eslint/visitor-keys': 8.0.1 debug: 4.3.6(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 - minimatch: 9.0.3 + minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.3.3) + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: - typescript: 5.3.3 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.1.0(typescript@5.5.3)': - dependencies: - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/visitor-keys': 7.1.0 - debug: 4.3.6(supports-color@5.5.0) - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.3) - optionalDependencies: - typescript: 5.5.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.3.3)': + '@typescript-eslint/utils@8.0.1(eslint@8.57.0)(typescript@5.5.4)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) + '@typescript-eslint/scope-manager': 8.0.1 + '@typescript-eslint/types': 8.0.1 + '@typescript-eslint/typescript-estree': 8.0.1(typescript@5.5.4) eslint: 8.57.0 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.5.3)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.5.3) - eslint: 8.57.0 - semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript @@ -12130,9 +12030,9 @@ snapshots: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@7.1.0': + '@typescript-eslint/visitor-keys@8.0.1': dependencies: - '@typescript-eslint/types': 7.1.0 + '@typescript-eslint/types': 8.0.1 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} @@ -12705,7 +12605,7 @@ snapshots: browserslist@4.23.3: dependencies: caniuse-lite: 1.0.30001649 - electron-to-chromium: 1.5.4 + electron-to-chromium: 1.5.5 node-releases: 2.0.18 update-browserslist-db: 1.1.0(browserslist@4.23.3) @@ -13291,21 +13191,21 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.5.3))(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.5.3))(typescript@5.5.3): + cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.5.4))(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.5.4))(typescript@5.5.4): dependencies: '@types/node': 20.5.1 - cosmiconfig: 8.3.6(typescript@5.5.3) - ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.5.3) - typescript: 5.5.3 + cosmiconfig: 8.3.6(typescript@5.5.4) + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.5.4) + typescript: 5.5.4 - cosmiconfig@8.3.6(typescript@5.5.3): + cosmiconfig@8.3.6(typescript@5.5.4): dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.5.3 + typescript: 5.5.4 crc-32@1.2.2: {} @@ -13749,7 +13649,7 @@ snapshots: dependencies: jake: 10.9.2 - electron-to-chromium@1.5.4: {} + electron-to-chromium@1.5.5: {} emoji-regex@8.0.0: {} @@ -14038,13 +13938,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.29.0)(eslint@8.57.0): + eslint-import-resolver-typescript@3.6.1(eslint-plugin-import@2.29.0)(eslint@8.57.0): dependencies: debug: 4.3.6(supports-color@5.5.0) enhanced-resolve: 5.17.1 eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.29.0)(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.8.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(eslint-plugin-import@2.29.0)(eslint@8.57.0))(eslint@8.57.0) + eslint-plugin-import: 2.29.0(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.6 is-core-module: 2.15.0 @@ -14055,18 +13955,17 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.29.0)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.8.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(eslint-plugin-import@2.29.0)(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.29.0)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(eslint-plugin-import@2.29.0)(eslint@8.57.0) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.29.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + eslint-plugin-import@2.29.0(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -14076,7 +13975,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.29.0)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.8.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(eslint-plugin-import@2.29.0)(eslint@8.57.0))(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.15.0 is-glob: 4.0.3 @@ -14086,8 +13985,6 @@ snapshots: object.values: 1.2.0 semver: 6.3.1 tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -16114,7 +16011,7 @@ snapshots: pretty-ms: 8.0.0 strip-json-comments: 5.0.1 summary: 2.1.0 - typescript: 5.5.3 + typescript: 5.5.4 zod: 3.23.8 zod-validation-error: 1.3.1(zod@3.23.8) @@ -16371,7 +16268,7 @@ snapshots: lz-ts@1.1.2: {} - madge@6.1.0(typescript@5.3.3): + madge@6.1.0(typescript@5.5.4): dependencies: chalk: 4.1.2 commander: 7.2.0 @@ -16396,36 +16293,7 @@ snapshots: ts-graphviz: 1.8.2 walkdir: 0.4.1 optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - madge@6.1.0(typescript@5.5.3): - dependencies: - chalk: 4.1.2 - commander: 7.2.0 - commondir: 1.0.1 - debug: 4.3.6(supports-color@5.5.0) - dependency-tree: 9.0.0 - detective-amd: 4.2.0 - detective-cjs: 4.1.0 - detective-es6: 3.0.1 - detective-less: 1.0.2 - detective-postcss: 6.1.3 - detective-sass: 4.1.3 - detective-scss: 3.1.1 - detective-stylus: 2.0.1 - detective-typescript: 9.1.1 - ora: 5.4.1 - pluralize: 8.0.0 - precinct: 8.3.1 - pretty-ms: 7.0.1 - rc: 1.2.8 - stream-to-array: 2.3.0 - ts-graphviz: 1.8.2 - walkdir: 0.4.1 - optionalDependencies: - typescript: 5.5.3 + typescript: 5.5.4 transitivePeerDependencies: - supports-color @@ -16621,10 +16489,6 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.1 - minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -19383,19 +19247,15 @@ snapshots: triple-beam@1.4.1: {} - ts-api-utils@1.3.0(typescript@5.3.3): + ts-api-utils@1.3.0(typescript@5.5.4): dependencies: - typescript: 5.3.3 - - ts-api-utils@1.3.0(typescript@5.5.3): - dependencies: - typescript: 5.5.3 + typescript: 5.5.4 ts-deepmerge@6.2.1: {} ts-graphviz@1.8.2: {} - ts-node@10.9.2(@types/node@20.5.1)(typescript@5.5.3): + ts-node@10.9.2(@types/node@20.5.1)(typescript@5.5.4): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -19409,7 +19269,7 @@ snapshots: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.5.3 + typescript: 5.5.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 @@ -19541,9 +19401,7 @@ snapshots: typescript@4.9.5: {} - typescript@5.3.3: {} - - typescript@5.5.3: {} + typescript@5.5.4: {} ua-parser-js@0.7.33: {} @@ -19839,7 +19697,7 @@ snapshots: - supports-color - terser - vite-plugin-checker@0.6.4(eslint@8.57.0)(optionator@0.9.4)(typescript@5.3.3)(vite@5.1.7(@types/node@20.14.11)(sass@1.70.0)(terser@5.31.3)): + vite-plugin-checker@0.6.4(eslint@8.57.0)(optionator@0.9.4)(typescript@5.5.4)(vite@5.1.7(@types/node@20.14.11)(sass@1.70.0)(terser@5.31.3)): dependencies: '@babel/code-frame': 7.24.7 ansi-escapes: 4.3.2 @@ -19860,7 +19718,7 @@ snapshots: optionalDependencies: eslint: 8.57.0 optionator: 0.9.4 - typescript: 5.3.3 + typescript: 5.5.4 vite-plugin-filter-replace@0.1.13: {}