From d146d51a95c2e6836bd52f07f2813b6f8705db07 Mon Sep 17 00:00:00 2001 From: Tiago de Paula Date: Tue, 28 Oct 2025 00:36:31 -0300 Subject: [PATCH] chore(deps): update typescript-eslint to v8 Changes: - `no-var-requires` replaced by `no-require-imports` (typescript-eslint/typescript-eslint#8334) - `restrict-template-expressions` does not trigger for `Error` (typescript-eslint/typescript-eslint#8556) - `only-throw-error` and `prefer-promise-reject-errors` recommended (typescript-eslint/typescript-eslint#9079) - fixed `no-base-to-string` in client/js/upload.ts - fixed `no-unsafe-enum-comparison` in client/js/store.ts - fixed `await-thenable` in test/client/js/helpers/parse.ts - fixed `no-empty-object-type` in client/shims-vue.d.ts and shared/types/socket-events.d.ts See --- .eslintrc.cjs | 3 +- client/js/store.ts | 2 +- client/js/upload.ts | 6 +- client/shims-vue.d.ts | 3 +- package.json | 4 +- server/command-line/index.ts | 2 +- server/command-line/install.ts | 8 +- server/command-line/start.ts | 2 +- server/command-line/uninstall.ts | 4 +- server/command-line/upgrade.ts | 2 +- server/command-line/users/add.ts | 2 +- server/command-line/users/edit.ts | 2 +- server/command-line/users/index.ts | 4 +- server/command-line/users/remove.ts | 2 +- server/command-line/users/reset.ts | 2 +- server/command-line/utils.ts | 2 +- server/config.ts | 2 +- server/helper.ts | 2 +- server/plugins/irc-events/connection.ts | 2 +- server/plugins/irc-events/link.ts | 9 +- server/plugins/messageStorage/sqlite.ts | 7 +- server/plugins/packages/index.ts | 7 +- server/server.ts | 2 - server/types/modules/irc-framework.d.ts | 2 +- shared/types/socket-events.d.ts | 8 +- test/client/js/helpers/parse.ts | 6 +- test/plugins/link.ts | 4 +- test/plugins/packages/indexTest.ts | 2 +- yarn.lock | 196 +++++++++++------------- 29 files changed, 151 insertions(+), 148 deletions(-) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 7c1e1a44..4c9e40d0 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -118,6 +118,7 @@ const tsTestRulesTemp = defineConfig({ // TODO: remove these "@typescript-eslint/no-unsafe-return": "off", "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-unused-expressions": "off", "@typescript-eslint/restrict-plus-operands": "off", }, }).rules; @@ -172,7 +173,7 @@ module.exports = defineConfig({ rules: {...baseRules, ...tsRules, ...tsRulesTemp, ...vueRules}, }, { - files: ["./tests/**/*.ts"], + files: ["./test/**/*.ts"], parser: "@typescript-eslint/parser", rules: { ...baseRules, diff --git a/client/js/store.ts b/client/js/store.ts index 15ce9d8d..a4f2e13d 100644 --- a/client/js/store.ts +++ b/client/js/store.ts @@ -22,7 +22,7 @@ enum DesktopNotificationState { function detectDesktopNotificationState(): DesktopNotificationState { if (!("Notification" in window)) { return DesktopNotificationState.Unsupported; - } else if (Notification.permission === DesktopNotificationState.Granted) { + } else if (Notification.permission === "granted") { return DesktopNotificationState.Granted; } else if (!window.isSecureContext) { return DesktopNotificationState.NoHttps; diff --git a/client/js/upload.ts b/client/js/upload.ts index dbe44972..28820e06 100644 --- a/client/js/upload.ts +++ b/client/js/upload.ts @@ -214,7 +214,11 @@ class Uploader { }, file.type); }; - img.src = String(fileReader.result); + if (typeof fileReader.result === "string") { + img.src = fileReader.result; + } else { + fileReader.abort(); + } }; fileReader.readAsDataURL(file); diff --git a/client/shims-vue.d.ts b/client/shims-vue.d.ts index 32971832..415e5f9e 100644 --- a/client/shims-vue.d.ts +++ b/client/shims-vue.d.ts @@ -1,7 +1,6 @@ // https://vuejs.github.io/vetur/guide/setup.html#vue3 declare module "*.vue" { import type {DefineComponent} from "vue"; - // eslint-disable-next-line @typescript-eslint/ban-types - const component: DefineComponent<{}, {}, any>; + const component: DefineComponent; export default component; } diff --git a/package.json b/package.json index 18ebff93..5bb95b87 100644 --- a/package.json +++ b/package.json @@ -111,8 +111,8 @@ "@types/webpack-env": "^1.18.8", "@types/webpack-hot-middleware": "^2.25.12", "@types/ws": "^8.18.1", - "@typescript-eslint/eslint-plugin": "^7.18.0", - "@typescript-eslint/parser": "^7.18.0", + "@typescript-eslint/eslint-plugin": "^8.54.0", + "@typescript-eslint/parser": "^8.54.0", "@vue/runtime-dom": "^3.5.27", "@vue/test-utils": "^2.4.6", "babel-loader": "^10.0.0", diff --git a/server/command-line/index.ts b/server/command-line/index.ts index 9127ad29..08dcf42f 100644 --- a/server/command-line/index.ts +++ b/server/command-line/index.ts @@ -1,4 +1,4 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ +/* eslint-disable @typescript-eslint/no-require-imports */ import log from "../log"; import fs from "fs"; import path from "path"; diff --git a/server/command-line/install.ts b/server/command-line/install.ts index e3e603c7..ea367b8b 100644 --- a/server/command-line/install.ts +++ b/server/command-line/install.ts @@ -104,12 +104,16 @@ program // the lockfile properly. We need to run an install in that case // even though that's supposed to be done by the add subcommand return Utils.executeYarnCommand("install").catch((err) => { - throw `Failed to update lockfile after package install ${err}`; + throw new Error( + `Failed to update lockfile after package install ${err}` + ); }); } }) .catch((code) => { - throw `Failed to install ${colors.red(humanVersion)}. Exit code: ${code}`; + throw new Error( + `Failed to install ${colors.red(humanVersion)}. Exit code: ${code}` + ); }); }) .catch((e) => { diff --git a/server/command-line/start.ts b/server/command-line/start.ts index 6ad67854..0c1e422f 100644 --- a/server/command-line/start.ts +++ b/server/command-line/start.ts @@ -15,7 +15,7 @@ program initalizeConfig(); const newLocal = "../server"; - // eslint-disable-next-line @typescript-eslint/no-var-requires + // eslint-disable-next-line @typescript-eslint/no-require-imports const server = require(newLocal); server.default(options); }); diff --git a/server/command-line/uninstall.ts b/server/command-line/uninstall.ts index 8f3988ff..f131ebce 100644 --- a/server/command-line/uninstall.ts +++ b/server/command-line/uninstall.ts @@ -10,9 +10,9 @@ program .description("Uninstall a theme or a package") .on("--help", Utils.extraHelp) .action(async function (packageName: string) { - // eslint-disable-next-line @typescript-eslint/no-var-requires + // eslint-disable-next-line @typescript-eslint/no-require-imports const fs = require("fs").promises; - // eslint-disable-next-line @typescript-eslint/no-var-requires + // eslint-disable-next-line @typescript-eslint/no-require-imports const path = require("path"); const packagesConfig = path.join(Config.getPackagesPath(), "package.json"); diff --git a/server/command-line/upgrade.ts b/server/command-line/upgrade.ts index fafdcfb5..88462ff2 100644 --- a/server/command-line/upgrade.ts +++ b/server/command-line/upgrade.ts @@ -1,4 +1,4 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ +/* eslint-disable @typescript-eslint/no-require-imports */ import log from "../log"; import colors from "chalk"; import {Command} from "commander"; diff --git a/server/command-line/users/add.ts b/server/command-line/users/add.ts index 1e921e55..32440c56 100644 --- a/server/command-line/users/add.ts +++ b/server/command-line/users/add.ts @@ -19,7 +19,7 @@ program return; } - // eslint-disable-next-line @typescript-eslint/no-var-requires + // eslint-disable-next-line @typescript-eslint/no-require-imports const ClientManager = require("../../clientManager").default; const manager = new ClientManager(); const users = manager.getUsers(); diff --git a/server/command-line/users/edit.ts b/server/command-line/users/edit.ts index 5568a9a4..3636b351 100644 --- a/server/command-line/users/edit.ts +++ b/server/command-line/users/edit.ts @@ -17,7 +17,7 @@ program return; } - // eslint-disable-next-line @typescript-eslint/no-var-requires + // eslint-disable-next-line @typescript-eslint/no-require-imports const ClientManager = require("../../clientManager").default; const users = new ClientManager().getUsers(); diff --git a/server/command-line/users/index.ts b/server/command-line/users/index.ts index 9f3c81bf..ed89d3be 100644 --- a/server/command-line/users/index.ts +++ b/server/command-line/users/index.ts @@ -2,9 +2,9 @@ import Config from "../../config"; let add, reset; if (!Config.values.ldap.enable) { - // eslint-disable-next-line @typescript-eslint/no-var-requires + // eslint-disable-next-line @typescript-eslint/no-require-imports add = require("./add").default; - // eslint-disable-next-line @typescript-eslint/no-var-requires + // eslint-disable-next-line @typescript-eslint/no-require-imports reset = require("./reset").default; } diff --git a/server/command-line/users/remove.ts b/server/command-line/users/remove.ts index 2416cd4b..6a24220e 100644 --- a/server/command-line/users/remove.ts +++ b/server/command-line/users/remove.ts @@ -16,7 +16,7 @@ program return; } - // eslint-disable-next-line @typescript-eslint/no-var-requires + // eslint-disable-next-line @typescript-eslint/no-require-imports const ClientManager = require("../../clientManager").default; const manager = new ClientManager(); diff --git a/server/command-line/users/reset.ts b/server/command-line/users/reset.ts index 82dd842e..4389727e 100644 --- a/server/command-line/users/reset.ts +++ b/server/command-line/users/reset.ts @@ -18,7 +18,7 @@ program return; } - // eslint-disable-next-line @typescript-eslint/no-var-requires + // eslint-disable-next-line @typescript-eslint/no-require-imports const ClientManager = require("../../clientManager").default; const users = new ClientManager().getUsers(); diff --git a/server/command-line/utils.ts b/server/command-line/utils.ts index f480f767..d057700d 100644 --- a/server/command-line/utils.ts +++ b/server/command-line/utils.ts @@ -193,7 +193,7 @@ class Utils { add.on("close", (code) => { if (!success || code !== 0) { - return reject(code); + return reject(new Error(`command failed with status code: ${code}`)); } resolve(true); diff --git a/server/config.ts b/server/config.ts index 0dafc5ed..0ab2c9da 100644 --- a/server/config.ts +++ b/server/config.ts @@ -1,4 +1,4 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ +/* eslint-disable @typescript-eslint/no-require-imports */ import path from "path"; import fs, {Stats} from "fs"; import os from "os"; diff --git a/server/helper.ts b/server/helper.ts index f9fdeaeb..c3866a98 100644 --- a/server/helper.ts +++ b/server/helper.ts @@ -57,7 +57,7 @@ function getGitCommit() { // --git-dir ".git" makes git only check current directory for `.git`, and not travel upwards // We set cwd to the location of `index.js` as soon as the process is started try { - // eslint-disable-next-line @typescript-eslint/no-var-requires + // eslint-disable-next-line @typescript-eslint/no-require-imports _gitCommit = require("child_process") .execSync( 'git --git-dir ".git" rev-parse --short HEAD', // Returns hash of current commit diff --git a/server/plugins/irc-events/connection.ts b/server/plugins/irc-events/connection.ts index ff28f545..acf670d9 100644 --- a/server/plugins/irc-events/connection.ts +++ b/server/plugins/irc-events/connection.ts @@ -118,7 +118,7 @@ export default function (irc, network) { client, new Msg({ type: MessageType.ERROR, - text: `Connection closed unexpectedly: ${String(error)}`, + text: `Connection closed unexpectedly: ${error}`, }), true ); diff --git a/server/plugins/irc-events/link.ts b/server/plugins/irc-events/link.ts index 6b336a1f..c8946a71 100644 --- a/server/plugins/irc-events/link.ts +++ b/server/plugins/irc-events/link.ts @@ -142,7 +142,7 @@ function parseHtml(preview, res, client: Client) { function parseHtmlMedia($: cheerio.CheerioAPI, preview, client: Client): Promise { return new Promise((resolve, reject) => { if (Config.values.disableMediaPreview) { - reject(); + reject(new Error("media preview disabled")); return; } @@ -157,7 +157,7 @@ function parseHtmlMedia($: cheerio.CheerioAPI, preview, client: Client): Promise !openGraphType.startsWith("video") && !openGraphType.startsWith("music") ) { - reject(); + reject(new Error(`og:type="${openGraphType}" is not a media type`)); return; } @@ -200,7 +200,7 @@ function parseHtmlMedia($: cheerio.CheerioAPI, preview, client: Client): Promise }) .then((resMedia) => { if (resMedia === null || !mediaTypeRegex.test(resMedia.type)) { - return reject(); + return reject(new Error(`invalid media type "${resMedia.type}"`)); } preview.type = type; @@ -217,7 +217,7 @@ function parseHtmlMedia($: cheerio.CheerioAPI, preview, client: Client): Promise }); if (!foundMedia) { - reject(); + reject(new Error("no media content found")); } }); } @@ -474,6 +474,7 @@ function fetch(uri: string, headers: Record) { resolve({data: buffer, type, size}); }); } catch (e: any) { + // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors return reject(e); } }); diff --git a/server/plugins/messageStorage/sqlite.ts b/server/plugins/messageStorage/sqlite.ts index 2f981ed5..938e2c18 100644 --- a/server/plugins/messageStorage/sqlite.ts +++ b/server/plugins/messageStorage/sqlite.ts @@ -15,6 +15,7 @@ import {SearchQuery, SearchResponse} from "../../../shared/types/storage"; let sqlite3: any; try { + // eslint-disable-next-line @typescript-eslint/no-require-imports sqlite3 = require("sqlite3"); } catch (e: any) { Config.values.messageStorage = Config.values.messageStorage.filter((item) => item !== "sqlite"); @@ -220,7 +221,9 @@ class SqliteMessageStorage implements SearchableMessageStorage { const version = await this.current_version(); if (version > currentSchemaVersion) { - throw `sqlite messages schema version is higher than expected (${version} > ${currentSchemaVersion}). Is The Lounge out of date?`; + throw new Error( + `sqlite messages schema version is higher than expected (${version} > ${currentSchemaVersion}). Is The Lounge out of date?` + ); } else if (version === currentSchemaVersion) { return; // nothing to do } @@ -259,7 +262,7 @@ class SqliteMessageStorage implements SearchableMessageStorage { return new Promise((resolve, reject) => { this.database.close((err) => { if (err) { - reject(`Failed to close sqlite database: ${err.message}`); + reject(new Error(`Failed to close sqlite database: ${err.message}`)); return; } diff --git a/server/plugins/packages/index.ts b/server/plugins/packages/index.ts index 7aa0af48..d67aa4e2 100644 --- a/server/plugins/packages/index.ts +++ b/server/plugins/packages/index.ts @@ -124,7 +124,7 @@ function loadPackage(packageName: string) { packageInfo = JSON.parse(fs.readFileSync(path.join(packagePath, "package.json"), "utf-8")); if (!packageInfo.thelounge) { - throw "'thelounge' is not present in package.json"; + throw new Error("'thelounge' is not present in package.json"); } if ( @@ -133,9 +133,12 @@ function loadPackage(packageName: string) { includePrerelease: true, // our pre-releases should respect the semver guarantees }) ) { - throw `v${packageInfo.version} does not support this version of The Lounge. Supports: ${packageInfo.thelounge.supports}`; + throw new Error( + `v${packageInfo.version} does not support this version of The Lounge. Supports: ${packageInfo.thelounge.supports}` + ); } + // eslint-disable-next-line @typescript-eslint/no-require-imports packageFile = require(packagePath); } catch (e: any) { log.error(`Package ${colors.bold(packageName)} could not be loaded: ${colors.red(e)}`); diff --git a/server/server.ts b/server/server.ts index 84ec87a1..34b3c1fb 100644 --- a/server/server.ts +++ b/server/server.ts @@ -190,7 +190,6 @@ export default async function ( }; } - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions server.on("error", (err) => log.error(`${err}`)); server.listen(listenParams, () => { @@ -231,7 +230,6 @@ export default async function ( }); sockets.on("connect", (socket) => { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions socket.on("error", (err) => log.error(`io socket error: ${err}`)); if (Config.values.public) { diff --git a/server/types/modules/irc-framework.d.ts b/server/types/modules/irc-framework.d.ts index ef9f82df..3c094e25 100644 --- a/server/types/modules/irc-framework.d.ts +++ b/server/types/modules/irc-framework.d.ts @@ -261,7 +261,7 @@ declare module "irc-framework" { on(eventType: "mode", cb: (event: ModeEventArgs) => any): this; - on(eventType: "socket close", cb: (event: Record) => any): this; + on(eventType: "socket close", cb: (error: Error) => any): this; on(eventType: "socket connected", cb: (event: Record) => any): this; diff --git a/shared/types/socket-events.d.ts b/shared/types/socket-events.d.ts index 312486cb..e34163cc 100644 --- a/shared/types/socket-events.d.ts +++ b/shared/types/socket-events.d.ts @@ -174,6 +174,10 @@ interface ClientToServerEvents { search: EventHandler; } -interface InterServerEvents {} +interface InterServerEvents { + [EventName: string]: never; +} -interface SocketData {} +interface SocketData { + [_: string]: never; +} diff --git a/test/client/js/helpers/parse.ts b/test/client/js/helpers/parse.ts index 1a3f108a..b4d774d4 100644 --- a/test/client/js/helpers/parse.ts +++ b/test/client/js/helpers/parse.ts @@ -343,7 +343,7 @@ describe("IRC formatted message parser", () => { }); }); - it("should find nicks", async () => { + it("should find nicks", () => { const testCases = [ { message: { @@ -358,8 +358,8 @@ describe("IRC formatted message parser", () => { }, ]; - const actual = await Promise.all( - testCases.map((testCase) => getParsedMessageContents(testCase.input, testCase.message)) + const actual = testCases.map((testCase) => + getParsedMessageContents(testCase.input, testCase.message) ); const expected = testCases.map((testCase) => testCase.expected); diff --git a/test/plugins/link.ts b/test/plugins/link.ts index 0d016512..3181c97a 100644 --- a/test/plugins/link.ts +++ b/test/plugins/link.ts @@ -229,7 +229,7 @@ Vivamus bibendum vulputate tincidunt. Sed vitae ligula felis.`; }); it("should ignore og:image if disableMediaPreview", function (done) { app.get("/nonexistent-test-image.png", function () { - throw "Should not fetch image"; + throw new Error("Should not fetch image"); }); const invalid_url = this._makeUrl("nonexistent-test-image.png"); @@ -251,7 +251,7 @@ Vivamus bibendum vulputate tincidunt. Sed vitae ligula felis.`; }); it("should ignore og:video if disableMediaPreview", function (done) { app.get("/nonexistent-video.mp4", function () { - throw "Should not fetch video"; + throw new Error("Should not fetch video"); }); const invalid_url = this._makeUrl("nonexistent-video.mp4"); diff --git a/test/plugins/packages/indexTest.ts b/test/plugins/packages/indexTest.ts index ca4c0d13..d86edb32 100644 --- a/test/plugins/packages/indexTest.ts +++ b/test/plugins/packages/indexTest.ts @@ -13,7 +13,7 @@ describe("packages", function () { logInfoStub = sinon.stub(log, "info"); delete require.cache[require.resolve("../../../server/plugins/packages")]; - // eslint-disable-next-line @typescript-eslint/no-var-requires + // eslint-disable-next-line @typescript-eslint/no-require-imports packages = require("../../../server/plugins/packages").default; }); diff --git a/yarn.lock b/yarn.lock index ab2a5bc7..b2373872 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1279,14 +1279,14 @@ resolved "https://registry.yarnpkg.com/@epic-web/invariant/-/invariant-1.0.0.tgz#1073e5dee6dd540410784990eb73e4acd25c9813" integrity sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA== -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0", "@eslint-community/eslint-utils@^4.9.1": version "4.9.1" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595" integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ== dependencies: eslint-visitor-keys "^3.4.3" -"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": +"@eslint-community/regexpp@^4.12.2", "@eslint-community/regexpp@^4.6.1": version "4.12.2" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== @@ -2050,86 +2050,101 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3" - integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw== +"@typescript-eslint/eslint-plugin@^8.54.0": + version "8.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.54.0.tgz#d8899e5c2eccf5c4a20d01c036a193753748454d" + integrity sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ== dependencies: - "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "7.18.0" - "@typescript-eslint/type-utils" "7.18.0" - "@typescript-eslint/utils" "7.18.0" - "@typescript-eslint/visitor-keys" "7.18.0" - graphemer "^1.4.0" - ignore "^5.3.1" + "@eslint-community/regexpp" "^4.12.2" + "@typescript-eslint/scope-manager" "8.54.0" + "@typescript-eslint/type-utils" "8.54.0" + "@typescript-eslint/utils" "8.54.0" + "@typescript-eslint/visitor-keys" "8.54.0" + ignore "^7.0.5" natural-compare "^1.4.0" - ts-api-utils "^1.3.0" + ts-api-utils "^2.4.0" -"@typescript-eslint/parser@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0" - integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg== +"@typescript-eslint/parser@^8.54.0": + version "8.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.54.0.tgz#3d01a6f54ed247deb9982621f70e7abf1810bd97" + integrity sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA== dependencies: - "@typescript-eslint/scope-manager" "7.18.0" - "@typescript-eslint/types" "7.18.0" - "@typescript-eslint/typescript-estree" "7.18.0" - "@typescript-eslint/visitor-keys" "7.18.0" - debug "^4.3.4" + "@typescript-eslint/scope-manager" "8.54.0" + "@typescript-eslint/types" "8.54.0" + "@typescript-eslint/typescript-estree" "8.54.0" + "@typescript-eslint/visitor-keys" "8.54.0" + debug "^4.4.3" -"@typescript-eslint/scope-manager@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83" - integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== +"@typescript-eslint/project-service@8.54.0": + version "8.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.54.0.tgz#f582aceb3d752544c8e1b11fea8d95d00cf9adc6" + integrity sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g== dependencies: - "@typescript-eslint/types" "7.18.0" - "@typescript-eslint/visitor-keys" "7.18.0" + "@typescript-eslint/tsconfig-utils" "^8.54.0" + "@typescript-eslint/types" "^8.54.0" + debug "^4.4.3" -"@typescript-eslint/type-utils@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b" - integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA== +"@typescript-eslint/scope-manager@8.54.0": + version "8.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.54.0.tgz#307dc8cbd80157e2772c2d36216857415a71ab33" + integrity sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg== dependencies: - "@typescript-eslint/typescript-estree" "7.18.0" - "@typescript-eslint/utils" "7.18.0" - debug "^4.3.4" - ts-api-utils "^1.3.0" + "@typescript-eslint/types" "8.54.0" + "@typescript-eslint/visitor-keys" "8.54.0" -"@typescript-eslint/types@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" - integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== +"@typescript-eslint/tsconfig-utils@8.54.0", "@typescript-eslint/tsconfig-utils@^8.54.0": + version "8.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.54.0.tgz#71dd7ba1674bd48b172fc4c85b2f734b0eae3dbc" + integrity sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw== -"@typescript-eslint/typescript-estree@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" - integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== +"@typescript-eslint/type-utils@8.54.0": + version "8.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.54.0.tgz#64965317dd4118346c2fa5ee94492892200e9fb9" + integrity sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA== dependencies: - "@typescript-eslint/types" "7.18.0" - "@typescript-eslint/visitor-keys" "7.18.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - minimatch "^9.0.4" - semver "^7.6.0" - ts-api-utils "^1.3.0" + "@typescript-eslint/types" "8.54.0" + "@typescript-eslint/typescript-estree" "8.54.0" + "@typescript-eslint/utils" "8.54.0" + debug "^4.4.3" + ts-api-utils "^2.4.0" -"@typescript-eslint/utils@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" - integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "7.18.0" - "@typescript-eslint/types" "7.18.0" - "@typescript-eslint/typescript-estree" "7.18.0" +"@typescript-eslint/types@8.54.0", "@typescript-eslint/types@^8.54.0": + version "8.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.54.0.tgz#c12d41f67a2e15a8a96fbc5f2d07b17331130889" + integrity sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA== -"@typescript-eslint/visitor-keys@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" - integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== +"@typescript-eslint/typescript-estree@8.54.0": + version "8.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.54.0.tgz#3c7716905b2b811fadbd2114804047d1bfc86527" + integrity sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA== dependencies: - "@typescript-eslint/types" "7.18.0" - eslint-visitor-keys "^3.4.3" + "@typescript-eslint/project-service" "8.54.0" + "@typescript-eslint/tsconfig-utils" "8.54.0" + "@typescript-eslint/types" "8.54.0" + "@typescript-eslint/visitor-keys" "8.54.0" + debug "^4.4.3" + minimatch "^9.0.5" + semver "^7.7.3" + tinyglobby "^0.2.15" + ts-api-utils "^2.4.0" + +"@typescript-eslint/utils@8.54.0": + version "8.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.54.0.tgz#c79a4bcbeebb4f571278c0183ed1cb601d84c6c8" + integrity sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA== + dependencies: + "@eslint-community/eslint-utils" "^4.9.1" + "@typescript-eslint/scope-manager" "8.54.0" + "@typescript-eslint/types" "8.54.0" + "@typescript-eslint/typescript-estree" "8.54.0" + +"@typescript-eslint/visitor-keys@8.54.0": + version "8.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.54.0.tgz#0e4b50124b210b8600b245dd66cbad52deb15590" + integrity sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA== + dependencies: + "@typescript-eslint/types" "8.54.0" + eslint-visitor-keys "^4.2.1" "@ungap/structured-clone@^1.2.0": version "1.3.0" @@ -2601,11 +2616,6 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - asn1.js@^5.3.0: version "5.4.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" @@ -3464,7 +3474,7 @@ dayjs@^1.11.19: resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.19.tgz#15dc98e854bb43917f12021806af897c58ae2938" integrity sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw== -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@^4.3.5, debug@^4.4.0, debug@^4.4.3, debug@~4.4.1: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.5, debug@^4.4.0, debug@^4.4.3, debug@~4.4.1: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== @@ -3559,13 +3569,6 @@ diff@^8.0.2: resolved "https://registry.yarnpkg.com/diff/-/diff-8.0.3.tgz#c7da3d9e0e8c283bb548681f8d7174653720c2d5" integrity sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ== -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -4030,7 +4033,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.9, fast-glob@^3.3.3: +fast-glob@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== @@ -4442,18 +4445,6 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - globby@^16.1.0: version "16.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-16.1.0.tgz#71ab8199e4fc1c4c21a59bd14ec0f31c71d7d7d4" @@ -4704,7 +4695,7 @@ ieee754@^1.1.13, ieee754@^1.2.1: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.2.0, ignore@^5.3.1: +ignore@^5.2.0: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== @@ -5463,7 +5454,7 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0, merge2@^1.4.1: +merge2@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -7294,11 +7285,6 @@ sinon@^9.0.3: nise "^4.0.4" supports-color "^7.1.0" -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - slash@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce" @@ -7800,10 +7786,10 @@ tree-dump@^1.0.3, tree-dump@^1.1.0: resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.1.0.tgz#ab29129169dc46004414f5a9d4a3c6e89f13e8a4" integrity sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA== -ts-api-utils@^1.3.0: - version "1.4.3" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" - integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== +ts-api-utils@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.4.0.tgz#2690579f96d2790253bdcf1ca35d569ad78f9ad8" + integrity sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA== ts-loader@^9.5.4: version "9.5.4"