chore: bump eslint typescript plugin (@miodec) (#6915)

This commit is contained in:
Jack 2025-08-26 22:12:27 +02:00 committed by GitHub
parent cb68421d72
commit e4c0c28150
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
28 changed files with 345 additions and 172 deletions

View file

@ -4,3 +4,4 @@ docker
backend/scripts
backend/private
**/vitest.config.ts
node_modules

View file

@ -226,7 +226,7 @@ export async function update(
//update speedStats
const boundaries = [...Array(32).keys()].map((it) => it * 10);
const statsKey = `${language}_${mode}_${mode2}`;
const src = await db.collection(lbCollectionName);
const src = db.collection(lbCollectionName);
const histogram = src.aggregate(
[
{

View file

@ -187,6 +187,7 @@ export async function approve(
if (compareTwoStrings(old.text, quote.text) > 0.8) {
throw new MonkeyError(409, "Duplicate quote");
}
return true;
});
let maxid = 0;
quoteObject.quotes.map(function (q) {

View file

@ -316,7 +316,7 @@ BannerEvent.subscribe(() => {
updateVerticalMargin();
});
$(document).ready(() => {
$(() => {
updateBreakpoint(true);
updateBreakpoint2();
});

View file

@ -72,10 +72,7 @@ function updateUI(): void {
if (Config.keymapMode === "next" && Config.mode !== "zen") {
if (!Config.language.startsWith("korean")) {
void KeymapEvent.highlight(
TestWords.words
.getCurrent()
.charAt(TestInput.input.current.length)
.toString()
TestWords.words.getCurrent().charAt(TestInput.input.current.length)
);
} else {
//word [가다]
@ -1194,10 +1191,7 @@ $(document).on("keydown", async (event) => {
if (
Config.layout !== "default" &&
!(
event.ctrlKey ||
(event.altKey && window.navigator.platform.search("Linux") > -1)
)
!(event.ctrlKey || (event.altKey && Misc.isLinux()))
) {
const char: string | null = await LayoutEmulator.getCharFromEvent(event);
if (char !== null) {
@ -1217,6 +1211,8 @@ $("#wordsInput").on("keydown", (event) => {
"spacing debug keydown STOPPED - repeat",
event.key,
event.code,
//ignore for logging
// eslint-disable-next-line @typescript-eslint/no-deprecated
event.which
);
return;
@ -1236,7 +1232,7 @@ $("#wordsInput").on("keydown", (event) => {
const now = performance.now();
setTimeout(() => {
const eventCode =
event.code === "" || event.which === 231 ? "NoCode" : event.code;
event.code === "" || event.key === "Unidentified" ? "NoCode" : event.code;
TestInput.recordKeydownTime(now, eventCode);
}, 0);
});
@ -1247,6 +1243,8 @@ $("#wordsInput").on("keyup", (event) => {
"spacing debug keydown STOPPED - repeat",
event.key,
event.code,
//ignore for logging
// eslint-disable-next-line @typescript-eslint/no-deprecated
event.which
);
return;
@ -1265,7 +1263,7 @@ $("#wordsInput").on("keyup", (event) => {
const now = performance.now();
setTimeout(() => {
const eventCode =
event.code === "" || event.which === 231 ? "NoCode" : event.code;
event.code === "" || event.key === "Unidentified" ? "NoCode" : event.code;
TestInput.recordKeyupTime(now, eventCode);
}, 0);
});

View file

@ -171,7 +171,8 @@ export async function navigate(
Notifications.add("No quit funbox is active. Please finish the test.", 0, {
important: true,
});
event?.preventDefault();
//todo: figure out if this was ever used
// event?.preventDefault();
return;
}

View file

@ -697,7 +697,7 @@ function selectBeforeChangeFn(
group: ResultFiltersGroup,
selectedOptions: Option[],
oldSelectedOptions: Option[]
): void | boolean {
): boolean {
const includesAllNow = selectedOptions.some(
(option) => option.value === "all"
);
@ -819,7 +819,7 @@ export async function appendButtons(
closeOnSelect: false,
},
events: {
beforeChange: (selectedOptions, oldSelectedOptions): void | boolean => {
beforeChange: (selectedOptions, oldSelectedOptions): boolean => {
return selectBeforeChangeFn(
"language",
selectedOptions,
@ -851,7 +851,7 @@ export async function appendButtons(
closeOnSelect: false,
},
events: {
beforeChange: (selectedOptions, oldSelectedOptions): void | boolean => {
beforeChange: (selectedOptions, oldSelectedOptions): boolean => {
return selectBeforeChangeFn(
"funbox",
selectedOptions,
@ -889,10 +889,7 @@ export async function appendButtons(
closeOnSelect: false,
},
events: {
beforeChange: (
selectedOptions,
oldSelectedOptions
): void | boolean => {
beforeChange: (selectedOptions, oldSelectedOptions): boolean => {
return selectBeforeChangeFn(
"tags",
selectedOptions,

View file

@ -477,7 +477,7 @@ export async function refresh(): Promise<void> {
}
}
const isMacLike = /Mac|iPod|iPhone|iPad/.test(navigator.platform);
const isMacLike = Misc.isMacLike();
const symbolsPattern = /^[^\p{L}\p{N}]{1}$/u;
type KeymapLegendStates = [letters: 0 | 1 | 2 | 3, symbols: 0 | 1 | 2 | 3];
let keymapLegendStates: KeymapLegendStates = [0, 0];

View file

@ -172,7 +172,7 @@ export async function createUserWithEmailAndPassword(
}
export async function getIdToken(): Promise<string | null> {
const user = await getAuthenticatedUser();
const user = getAuthenticatedUser();
if (user === null) return null;
return firebaseGetIdToken(user);
}

View file

@ -555,21 +555,21 @@ async function setup(modalEl: HTMLElement): Promise<void> {
});
modalEl.querySelector(".button.wordfilter")?.addEventListener("click", () => {
void WordFilterPopup.show({
modalChain: modal as AnimatedModal<unknown, unknown>,
modalChain: modal as AnimatedModal,
});
});
modalEl
.querySelector(".button.showSavedTexts")
?.addEventListener("click", () => {
void SavedTextsPopup.show({
modalChain: modal as AnimatedModal<unknown, unknown>,
modalChain: modal as AnimatedModal,
});
});
modalEl
.querySelector(".button.saveCustomText")
?.addEventListener("click", () => {
void SaveCustomTextPopup.show({
modalChain: modal as AnimatedModal<unknown, unknown>,
modalChain: modal as AnimatedModal,
modalChainData: { text: cleanUpText() },
});
});

View file

@ -199,10 +199,7 @@ async function updateProfile(): Promise<void> {
hide();
}
function addValidation(
element: JQuery<HTMLElement>,
schema: Zod.Schema
): InputIndicator {
function addValidation(element: JQuery, schema: Zod.Schema): InputIndicator {
const indicator = new InputIndicator(element, {
valid: {
icon: "fa-check",

View file

@ -55,7 +55,7 @@ async function fill(): Promise<void> {
return;
}
showPopup("deleteCustomText", [name], {
modalChain: modal as AnimatedModal<unknown, unknown>,
modalChain: modal as AnimatedModal,
});
});
@ -70,7 +70,7 @@ async function fill(): Promise<void> {
return;
}
showPopup("deleteCustomTextLong", [name], {
modalChain: modal as AnimatedModal<unknown, unknown>,
modalChain: modal as AnimatedModal,
});
}
);
@ -86,7 +86,7 @@ async function fill(): Promise<void> {
return;
}
showPopup("resetProgressCustomTextLong", [name], {
modalChain: modal as AnimatedModal<unknown, unknown>,
modalChain: modal as AnimatedModal,
});
}
);

View file

@ -1022,8 +1022,8 @@ function convertRuleOption(rule: string): string[] {
}
async function updateValidDailyLeaderboards(): Promise<void> {
const dailyRulesConfig = await ServerConfiguration.get()?.dailyLeaderboards
.validModeRules;
const dailyRulesConfig =
ServerConfiguration.get()?.dailyLeaderboards.validModeRules;
if (dailyRulesConfig === undefined) {
throw new Error(

View file

@ -1,7 +1,7 @@
import Config from "../config";
import * as Misc from "../utils/misc";
const el = document.querySelector("#capsWarning") as HTMLElement;
const isMacOs = navigator.platform.startsWith("Mac");
export let capsState = false;
@ -39,5 +39,5 @@ function update(event: JQuery.KeyDownEvent | JQuery.KeyUpEvent): void {
$(document).on("keyup", update);
$(document).on("keydown", (event) => {
if (isMacOs) update(event);
if (Misc.isMac()) update(event);
});

View file

@ -386,10 +386,7 @@ const list: Partial<Record<FunboxName, FunboxFunctions>> = {
}
setTimeout(() => {
void KeymapEvent.highlight(
TestWords.words
.getCurrent()
.charAt(TestInput.input.current.length)
.toString()
TestWords.words.getCurrent().charAt(TestInput.input.current.length)
);
}, 1);
}
@ -407,7 +404,6 @@ const list: Partial<Record<FunboxName, FunboxFunctions>> = {
TestInput.input.current.length,
TestInput.input.current.length + 1
)
.toString()
);
}, 1);
},

View file

@ -43,6 +43,8 @@ const accents: Accents = [
];
const accentsMap = new Map<string, string>(
// ignoring for now but this might need a different approach
// eslint-disable-next-line @typescript-eslint/no-misused-spread
accents.flatMap((rule) => [...rule[0]].map((accent) => [accent, rule[1]]))
);
@ -72,6 +74,8 @@ export function replaceAccents(
): string {
if (!word) return word;
const uppercased = word.toUpperCase();
// ignoring for now but this might need a different approach
// eslint-disable-next-line @typescript-eslint/no-misused-spread
const cases = [...word].map((it, i) => it === uppercased[i]);
const newWordArray: string[] = [];

View file

@ -169,17 +169,17 @@ export function restart(options = {} as RestartOptions): void {
Notifications.add("No quit funbox is active. Please finish the test.", 0, {
important: true,
});
event?.preventDefault();
options.event?.preventDefault();
return;
}
if (TestUI.testRestarting || TestUI.resultCalculating) {
event?.preventDefault();
options.event?.preventDefault();
return;
}
if (ActivePage.get() === "test") {
if (!ManualRestart.get()) {
if (Config.mode !== "zen") event?.preventDefault();
if (Config.mode !== "zen") options.event?.preventDefault();
if (
!canQuickRestart(
Config.mode,
@ -354,7 +354,7 @@ export function restart(options = {} as RestartOptions): void {
TestState.setTestInitSuccess(true);
const initResult = await init();
if (initResult === null) {
if (!initResult) {
TestUI.setTestRestarting(false);
return;
}
@ -405,7 +405,8 @@ export function restart(options = {} as RestartOptions): void {
let lastInitError: Error | null = null;
let rememberLazyMode: boolean;
let testReinitCount = 0;
export async function init(): Promise<void | null> {
export async function init(): Promise<boolean> {
console.debug("Initializing test");
testReinitCount++;
if (testReinitCount > 3) {
@ -426,7 +427,7 @@ export async function init(): Promise<void | null> {
// important: true,
// }
// );
return null;
return false;
}
MonkeyPower.reset();
@ -561,6 +562,8 @@ export async function init(): Promise<void | null> {
if (Config.keymapMode === "next" && Config.mode !== "zen") {
void KeymapEvent.highlight(
// ignoring for now but this might need a different approach
// eslint-disable-next-line @typescript-eslint/no-misused-spread
Arrays.nthElementFromArray([...TestWords.words.getCurrent()], 0) as string
);
}
@ -573,6 +576,7 @@ export async function init(): Promise<void | null> {
"Test initialized with section indexes",
generatedSectionIndexes
);
return true;
}
export function areAllTestWordsGenerated(): boolean {
@ -603,9 +607,12 @@ export async function addWord(): Promise<void> {
}
let bound = 100; // how many extra words to aim for AFTER the current word
const funboxToPush = getActiveFunboxes()
.find((f) => f.properties?.find((fp) => fp.startsWith("toPush")))
?.properties?.find((fp) => fp.startsWith("toPush:"));
const funboxToPush =
getActiveFunboxes()
.flatMap((fb) => fb.properties ?? [])
.find((prop) => prop.startsWith("toPush:")) ?? "";
const toPushCount = funboxToPush?.split(":")[1];
if (toPushCount !== undefined) bound = +toPushCount - 1;
@ -1561,6 +1568,8 @@ ConfigEvent.subscribe((eventKey, eventValue, nosave) => {
setTimeout(() => {
void KeymapEvent.highlight(
Arrays.nthElementFromArray(
// ignoring for now but this might need a different approach
// eslint-disable-next-line @typescript-eslint/no-misused-spread
[...TestWords.words.getCurrent()],
0
) as string

View file

@ -540,7 +540,7 @@ export async function centerActiveLine(): Promise<void> {
return;
}
const { resolve, promise } = Misc.promiseWithResolvers<void>();
const { resolve, promise } = Misc.promiseWithResolvers();
centeringActiveLine = promise;
const wordElements = document.querySelectorAll<HTMLElement>("#words .word");
@ -1128,7 +1128,7 @@ export async function lineJump(
currentTop: number,
force = false
): Promise<void> {
const { resolve, promise } = Misc.promiseWithResolvers<void>();
const { resolve, promise } = Misc.promiseWithResolvers();
//last word of the line
if (currentTestLine > 0 || force) {

View file

@ -14,7 +14,7 @@ class Words {
get(i?: undefined, raw?: boolean): string[];
get(i: number, raw?: boolean): string;
get(i?: number | undefined, raw = false): string | string[] | undefined {
get(i?: number, raw = false): string | string[] | undefined {
if (i === undefined) {
return this.list;
} else {

View file

@ -391,16 +391,11 @@ function applyLazyModeToWord(word: string, language: LanguageObject): string {
}
export function getWordOrder(): FunboxWordOrder {
const wordOrder =
getActiveFunboxes()
.find((f) => f.properties?.find((fp) => fp.startsWith("wordOrder")))
?.properties?.find((fp) => fp.startsWith("wordOrder")) ?? "";
const wordOrderProperty = getActiveFunboxes()
.flatMap((fb) => fb.properties ?? [])
.find((prop) => prop.startsWith("wordOrder:"));
if (!wordOrder) {
return "normal";
} else {
return wordOrder.split(":")[1] as FunboxWordOrder;
}
return (wordOrderProperty?.split(":")[1] as FunboxWordOrder) ?? "normal";
}
export function getLimit(): number {
@ -418,8 +413,8 @@ export function getLimit(): number {
const funboxToPush =
getActiveFunboxes()
.find((f) => f.properties?.find((fp) => fp.startsWith("toPush")))
?.properties?.find((fp) => fp.startsWith("toPush:")) ?? "";
.flatMap((fb) => fb.properties ?? [])
.find((prop) => prop.startsWith("toPush:")) ?? "";
if (Config.showAllLines) {
if (Config.mode === "custom") {

View file

@ -87,7 +87,8 @@ window.addEventListener("beforeunload", (event) => {
} else {
if (TestState.isActive) {
event.preventDefault();
// Chrome requires returnValue to be set.
// Included for legacy support, e.g. Chrome/Edge < 119
// eslint-disable-next-line @typescript-eslint/no-deprecated
event.returnValue = "";
}
}

View file

@ -38,12 +38,12 @@ export function smooth(
* This function mutates the input array.
* @param elements
*/
export function shuffle<T>(elements: T[]): void {
export function shuffle(elements: unknown[]): void {
for (let i = elements.length - 1; i > 0; --i) {
const j = randomIntFromRange(0, i);
const temp = elements[j];
elements[j] = elements[i] as T;
elements[i] = temp as T;
elements[j] = elements[i];
elements[i] = temp;
}
}

View file

@ -720,4 +720,27 @@ export function debounceUntilResolved<TArgs extends unknown[], TResult>(
export function triggerResize(): void {
$(window).trigger("resize");
}
function isPlatform(searchTerm: string | RegExp): boolean {
// eslint-disable-next-line @typescript-eslint/no-deprecated
const platform = navigator.platform;
if (typeof searchTerm === "string") {
return platform.includes(searchTerm);
} else {
return searchTerm.test(platform);
}
}
export function isLinux(): boolean {
return isPlatform("Linux");
}
export function isMac(): boolean {
return isPlatform("Mac");
}
export function isMacLike(): boolean {
return isPlatform(/Mac|iPod|iPhone|iPad/);
}
// DO NOT ALTER GLOBAL OBJECTSONSTRUCTOR, IT WILL BREAK RESULT HASHES

View file

@ -16,6 +16,8 @@ export type GetConfigurationResponse = z.infer<
typeof GetConfigurationResponseSchema
>;
// marked as deprecated but zod team might reconsider according to https://github.com/colinhacks/zod/issues/2854#issuecomment-3100623150
// eslint-disable-next-line @typescript-eslint/no-deprecated
export const PartialConfigurationSchema = ConfigurationSchema.deepPartial();
export type PartialConfiguration = z.infer<typeof PartialConfigurationSchema>;

View file

@ -91,17 +91,45 @@ module.exports = {
"plugin:oxlint/recommended",
],
rules: {
//strict type checked
"@typescript-eslint/require-await": "off",
//not using
"@typescript-eslint/non-nullable-type-assertion-style": "off",
"import/namespace": "off",
"@typescript-eslint/no-unnecessary-condition": "off",
"@typescript-eslint/switch-exhaustiveness-check": "off",
"@typescript-eslint/no-this-alias": "off",
"@typescript-eslint/unbound-method": "off",
"@typescript-eslint/await-thenable": "off",
//unnecessary, might aswell keep template strings in case a string might be added in the future
"@typescript-eslint/no-unnecessary-template-expression": "off",
"@typescript-eslint/prefer-promise-reject-errors": "off",
"@typescript-eslint/no-unnecessary-type-arguments": "off",
"@typescript-eslint/restrict-template-expressions": "off",
"@typescript-eslint/no-redundant-type-constituents": "off",
"@typescript-eslint/restrict-plus-operands": "off",
//todo: consider some of these?
//936, no options on this one. super strict, it doesnt allow casting to a narrower type
"@typescript-eslint/no-unsafe-type-assertion": "off",
//224 errors, very easy to fix.
// adds unnecessary promise overhead and pushing the function to the microtask queue, creating a delay
// all though performance impact probably minimal
// anything that needs to be absolutely as fast as possible should not be async (if not using await)
"@typescript-eslint/require-await": "off",
//388, when allowing numbers only 27, when also allowing arrays 12
// could be nice to avoid some weird things showing up in templated strings
"@typescript-eslint/restrict-template-expressions": [
"off",
{
allowNumber: true,
allowArray: true,
},
],
//only 4 but i don't really understand this rule
"@typescript-eslint/no-redundant-type-constituents": "off",
//162, 31 when allowing numbers and strings, kinda related to restrict-template-expressions
"@typescript-eslint/restrict-plus-operands": [
"off",
{
allowNumberAndString: true,
},
],
//using
"@typescript-eslint/no-unsafe-member-access": "error",
"@typescript-eslint/no-unsafe-call": "error",
"@typescript-eslint/no-unsafe-argument": "error",
@ -111,7 +139,6 @@ module.exports = {
"error",
{ ignoreArrowShorthand: true },
],
"@typescript-eslint/no-this-alias": "off",
"@typescript-eslint/no-misused-promises": [
"error",
{
@ -124,10 +151,26 @@ module.exports = {
"error",
{ allowNullableBoolean: true },
],
"@typescript-eslint/non-nullable-type-assertion-style": "off",
"@typescript-eslint/no-unnecessary-condition": "off",
"@typescript-eslint/no-invalid-void-type": "off",
"import/namespace": "off",
"@typescript-eslint/no-invalid-void-type": "error",
"@typescript-eslint/no-array-delete": "error",
"@typescript-eslint/no-base-to-string": "error",
"@typescript-eslint/no-duplicate-type-constituents": "error",
"@typescript-eslint/no-for-in-array": "error",
"@typescript-eslint/no-implied-eval": "error",
"@typescript-eslint/no-meaningless-void-operator": "error",
"@typescript-eslint/no-mixed-enums": "error",
"@typescript-eslint/no-unnecessary-boolean-literal-compare": "error",
"@typescript-eslint/no-unsafe-enum-comparison": "error",
"@typescript-eslint/no-unsafe-return": "error",
"@typescript-eslint/no-unsafe-unary-minus": "error",
"@typescript-eslint/prefer-reduce-type-parameter": "error",
"@typescript-eslint/prefer-return-this-type": "error",
"@typescript-eslint/related-getter-setter-pairs": "error",
"@typescript-eslint/require-array-sort-compare": "error",
"@typescript-eslint/return-await": "error",
"@typescript-eslint/use-unknown-in-catch-callback-variable": "error",
"@typescript-eslint/await-thenable": "error",
"@typescript-eslint/no-unnecessary-type-arguments": "error",
//handled by oxlint
"@typescript-eslint/no-non-null-assertion": "off",

View file

@ -2,7 +2,7 @@
"name": "@monkeytype/eslint-config",
"private": true,
"devDependencies": {
"@typescript-eslint/eslint-plugin": "8.0.1",
"@typescript-eslint/eslint-plugin": "8.41.0",
"@typescript-eslint/parser": "8.2.0",
"eslint-config-prettier": "9.1.0",
"eslint-import-resolver-typescript": "3.6.1",

View file

@ -38,8 +38,9 @@ export function checkCompatibility(
f.frontendFunctions?.includes("withWords")
).length <= 1;
const oneWordOrderMax =
funboxesToCheck.filter((f) =>
f.properties?.find((fp) => fp.startsWith("wordOrder"))
funboxesToCheck.filter(
(f) =>
f.properties?.find((fp) => fp.startsWith("wordOrder")) !== undefined
).length <= 1;
const layoutUsability =
funboxesToCheck.filter((f) =>
@ -49,8 +50,11 @@ export function checkCompatibility(
f.properties?.find((fp) => fp === "ignoresLayout" || fp === "usesLayout")
).length === 0;
const oneNospaceOrToPushMax =
funboxesToCheck.filter((f) =>
f.properties?.find((fp) => fp === "nospace" || fp.startsWith("toPush"))
funboxesToCheck.filter(
(f) =>
f.properties?.find(
(fp) => fp === "nospace" || fp.startsWith("toPush")
) !== undefined
).length <= 1;
const oneChangesWordsVisibilityMax =
funboxesToCheck.filter((f) =>
@ -98,7 +102,7 @@ export function checkCompatibility(
const oneToPushOrPullSectionMax =
funboxesToCheck.filter(
(f) =>
(f.properties?.find((fp) => fp.startsWith("toPush:")) ?? "") ||
f.properties?.find((fp) => fp.startsWith("toPush:")) !== undefined ||
f.frontendFunctions?.includes("pullSection")
).length <= 1;
const onePunctuateWordMax =

273
pnpm-lock.yaml generated
View file

@ -537,8 +537,8 @@ importers:
packages/eslint-config:
devDependencies:
'@typescript-eslint/eslint-plugin':
specifier: 8.0.1
version: 8.0.1(@typescript-eslint/parser@8.2.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4)
specifier: 8.41.0
version: 8.41.0(@typescript-eslint/parser@8.2.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4)
'@typescript-eslint/parser':
specifier: 8.2.0
version: 8.2.0(eslint@8.57.1)(typescript@5.5.4)
@ -1717,10 +1717,20 @@ packages:
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
'@eslint-community/eslint-utils@4.7.0':
resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
'@eslint-community/regexpp@4.11.0':
resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint-community/regexpp@4.12.1':
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint/eslintrc@2.1.4':
resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@ -3159,16 +3169,13 @@ packages:
'@types/whatwg-url@11.0.5':
resolution: {integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==}
'@typescript-eslint/eslint-plugin@8.0.1':
resolution: {integrity: sha512-5g3Y7GDFsJAnY4Yhvk8sZtFfV6YNF2caLzjrRPUBzewjPCaj0yokePB4LJSobyCzGMzjZZYFbwuzbfDHlimXbQ==}
'@typescript-eslint/eslint-plugin@8.41.0':
resolution: {integrity: sha512-8fz6oa6wEKZrhXWro/S3n2eRJqlRcIa6SlDh59FXJ5Wp5XRZ8B9ixpJDcjadHq47hMx0u+HW6SNa6LjJQ6NLtw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
'@typescript-eslint/parser': ^8.41.0
eslint: ^8.57.0 || ^9.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/parser@8.2.0':
resolution: {integrity: sha512-j3Di+o0lHgPrb7FxL3fdEy6LJ/j2NE8u+AP/5cQ9SKb+JLH6V6UHDqJ+e0hXBkHP1wn1YDFjYCS9LBQsZDlDEg==}
@ -3180,35 +3187,45 @@ packages:
typescript:
optional: true
'@typescript-eslint/scope-manager@8.0.1':
resolution: {integrity: sha512-NpixInP5dm7uukMiRyiHjRKkom5RIFA4dfiHvalanD2cF0CLUuQqxfg8PtEUo9yqJI2bBhF+pcSafqnG3UBnRQ==}
'@typescript-eslint/project-service@8.41.0':
resolution: {integrity: sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/scope-manager@8.2.0':
resolution: {integrity: sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/type-utils@8.0.1':
resolution: {integrity: sha512-+/UT25MWvXeDX9YaHv1IS6KI1fiuTto43WprE7pgSMswHbn1Jm9GEM4Txp+X74ifOWV8emu2AWcbLhpJAvD5Ng==}
'@typescript-eslint/scope-manager@8.41.0':
resolution: {integrity: sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/tsconfig-utils@8.41.0':
resolution: {integrity: sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/type-utils@8.41.0':
resolution: {integrity: sha512-63qt1h91vg3KsjVVonFJWjgSK7pZHSQFKH6uwqxAH9bBrsyRhO6ONoKyXxyVBzG1lJnFAJcKAcxLS54N1ee1OQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/types@7.18.0':
resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==}
engines: {node: ^18.18.0 || >=20.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/types@8.2.0':
resolution: {integrity: sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/types@8.41.0':
resolution: {integrity: sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@7.18.0':
resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==}
engines: {node: ^18.18.0 || >=20.0.0}
@ -3218,15 +3235,6 @@ packages:
typescript:
optional: true
'@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/typescript-estree@8.2.0':
resolution: {integrity: sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@ -3236,24 +3244,31 @@ packages:
typescript:
optional: true
'@typescript-eslint/utils@8.0.1':
resolution: {integrity: sha512-CBFR0G0sCt0+fzfnKaciu9IBsKvEKYwN9UZ+eeogK1fYHg4Qxk1yf/wLQkLXlq8wbU2dFlgAesxt8Gi76E8RTA==}
'@typescript-eslint/typescript-estree@8.41.0':
resolution: {integrity: sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/utils@8.41.0':
resolution: {integrity: sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/visitor-keys@7.18.0':
resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==}
engines: {node: ^18.18.0 || >=20.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}
'@typescript-eslint/visitor-keys@8.2.0':
resolution: {integrity: sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/visitor-keys@8.41.0':
resolution: {integrity: sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@ungap/structured-clone@1.2.0':
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
@ -4931,6 +4946,10 @@ packages:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
eslint-visitor-keys@4.2.1:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint-watch@8.0.0:
resolution: {integrity: sha512-piws/uE4gkZdz1pwkaEFx+kSWvoGnVX8IegFRrE1NUvlXjtU0rg7KhT1QDj/NzhAwbiLEfdRHWz5q738R4zDKA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@ -5059,6 +5078,10 @@ packages:
resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
engines: {node: '>=8.6.0'}
fast-glob@3.3.3:
resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
engines: {node: '>=8.6.0'}
fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
@ -5701,6 +5724,14 @@ packages:
resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
engines: {node: '>= 4'}
ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
ignore@7.0.5:
resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
engines: {node: '>= 4'}
immutable@4.3.7:
resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==}
@ -6667,6 +6698,10 @@ packages:
resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==}
engines: {node: '>=8.6'}
micromatch@4.0.8:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
mime-db@1.52.0:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
@ -8176,6 +8211,11 @@ packages:
engines: {node: '>=10'}
hasBin: true
semver@7.7.2:
resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
engines: {node: '>=10'}
hasBin: true
send@0.18.0:
resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
engines: {node: '>= 0.8.0'}
@ -8624,7 +8664,7 @@ packages:
superagent@7.1.6:
resolution: {integrity: sha512-gZkVCQR1gy/oUXr+kxJMLDjla434KmSOKbx5iGD30Ql+AkJQ/YlPKECJy2nhqOsHLjGHzoDTXNSjhnvWhzKk7g==}
engines: {node: '>=6.4.0 <13 || >=14'}
deprecated: Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net
deprecated: Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net
superstatic@9.0.3:
resolution: {integrity: sha512-e/tmW0bsnQ/33ivK6y3CapJT0Ovy4pk/ohNPGhIAGU2oasoNLRQ1cv6enua09NU9w6Y0H/fBu07cjzuiWvLXxw==}
@ -8858,6 +8898,18 @@ packages:
peerDependencies:
typescript: '>=4.2.0'
ts-api-utils@1.4.3:
resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==}
engines: {node: '>=16'}
peerDependencies:
typescript: '>=4.2.0'
ts-api-utils@2.1.0:
resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
engines: {node: '>=18.12'}
peerDependencies:
typescript: '>=4.8.4'
ts-deepmerge@6.2.1:
resolution: {integrity: sha512-8CYSLazCyj0DJDpPIxOFzJG46r93uh6EynYjuey+bxcLltBeqZL7DMfaE5ZPzZNFlav7wx+2TDa/mBl8gkTYzw==}
engines: {node: '>=14.13.1'}
@ -10829,8 +10881,15 @@ snapshots:
eslint: 8.57.1
eslint-visitor-keys: 3.4.3
'@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)':
dependencies:
eslint: 8.57.1
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.11.0': {}
'@eslint-community/regexpp@4.12.1': {}
'@eslint/eslintrc@2.1.4':
dependencies:
ajv: 6.12.6
@ -12529,20 +12588,19 @@ snapshots:
dependencies:
'@types/webidl-conversions': 7.0.3
'@typescript-eslint/eslint-plugin@8.0.1(@typescript-eslint/parser@8.2.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4)':
'@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.2.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4)':
dependencies:
'@eslint-community/regexpp': 4.11.0
'@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.2.0(eslint@8.57.1)(typescript@5.5.4)
'@typescript-eslint/scope-manager': 8.0.1
'@typescript-eslint/type-utils': 8.0.1(eslint@8.57.1)(typescript@5.5.4)
'@typescript-eslint/utils': 8.0.1(eslint@8.57.1)(typescript@5.5.4)
'@typescript-eslint/visitor-keys': 8.0.1
'@typescript-eslint/scope-manager': 8.41.0
'@typescript-eslint/type-utils': 8.41.0(eslint@8.57.1)(typescript@5.5.4)
'@typescript-eslint/utils': 8.41.0(eslint@8.57.1)(typescript@5.5.4)
'@typescript-eslint/visitor-keys': 8.41.0
eslint: 8.57.1
graphemer: 1.4.0
ignore: 5.3.1
ignore: 7.0.5
natural-compare: 1.4.0
ts-api-utils: 1.3.0(typescript@5.5.4)
optionalDependencies:
ts-api-utils: 2.1.0(typescript@5.5.4)
typescript: 5.5.4
transitivePeerDependencies:
- supports-color
@ -12560,34 +12618,47 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/scope-manager@8.0.1':
'@typescript-eslint/project-service@8.41.0(typescript@5.5.4)':
dependencies:
'@typescript-eslint/types': 8.0.1
'@typescript-eslint/visitor-keys': 8.0.1
'@typescript-eslint/tsconfig-utils': 8.41.0(typescript@5.5.4)
'@typescript-eslint/types': 8.41.0
debug: 4.4.1
typescript: 5.5.4
transitivePeerDependencies:
- supports-color
'@typescript-eslint/scope-manager@8.2.0':
dependencies:
'@typescript-eslint/types': 8.2.0
'@typescript-eslint/visitor-keys': 8.2.0
'@typescript-eslint/type-utils@8.0.1(eslint@8.57.1)(typescript@5.5.4)':
'@typescript-eslint/scope-manager@8.41.0':
dependencies:
'@typescript-eslint/typescript-estree': 8.0.1(typescript@5.5.4)
'@typescript-eslint/utils': 8.0.1(eslint@8.57.1)(typescript@5.5.4)
'@typescript-eslint/types': 8.41.0
'@typescript-eslint/visitor-keys': 8.41.0
'@typescript-eslint/tsconfig-utils@8.41.0(typescript@5.5.4)':
dependencies:
typescript: 5.5.4
'@typescript-eslint/type-utils@8.41.0(eslint@8.57.1)(typescript@5.5.4)':
dependencies:
'@typescript-eslint/types': 8.41.0
'@typescript-eslint/typescript-estree': 8.41.0(typescript@5.5.4)
'@typescript-eslint/utils': 8.41.0(eslint@8.57.1)(typescript@5.5.4)
debug: 4.4.1
ts-api-utils: 1.3.0(typescript@5.5.4)
optionalDependencies:
eslint: 8.57.1
ts-api-utils: 2.1.0(typescript@5.5.4)
typescript: 5.5.4
transitivePeerDependencies:
- eslint
- supports-color
'@typescript-eslint/types@7.18.0': {}
'@typescript-eslint/types@8.0.1': {}
'@typescript-eslint/types@8.2.0': {}
'@typescript-eslint/types@8.41.0': {}
'@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4)':
dependencies:
'@typescript-eslint/types': 7.18.0
@ -12597,22 +12668,7 @@ snapshots:
is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.6.3
ts-api-utils: 1.3.0(typescript@5.5.4)
optionalDependencies:
typescript: 5.5.4
transitivePeerDependencies:
- supports-color
'@typescript-eslint/typescript-estree@8.0.1(typescript@5.5.4)':
dependencies:
'@typescript-eslint/types': 8.0.1
'@typescript-eslint/visitor-keys': 8.0.1
debug: 4.4.1
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.6.3
ts-api-utils: 1.3.0(typescript@5.5.4)
ts-api-utils: 1.4.3(typescript@5.5.4)
optionalDependencies:
typescript: 5.5.4
transitivePeerDependencies:
@ -12633,32 +12689,48 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@8.0.1(eslint@8.57.1)(typescript@5.5.4)':
'@typescript-eslint/typescript-estree@8.41.0(typescript@5.5.4)':
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1)
'@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.1
'@typescript-eslint/project-service': 8.41.0(typescript@5.5.4)
'@typescript-eslint/tsconfig-utils': 8.41.0(typescript@5.5.4)
'@typescript-eslint/types': 8.41.0
'@typescript-eslint/visitor-keys': 8.41.0
debug: 4.4.1
fast-glob: 3.3.3
is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.7.2
ts-api-utils: 2.1.0(typescript@5.5.4)
typescript: 5.5.4
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@8.41.0(eslint@8.57.1)(typescript@5.5.4)':
dependencies:
'@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1)
'@typescript-eslint/scope-manager': 8.41.0
'@typescript-eslint/types': 8.41.0
'@typescript-eslint/typescript-estree': 8.41.0(typescript@5.5.4)
eslint: 8.57.1
typescript: 5.5.4
transitivePeerDependencies:
- supports-color
- typescript
'@typescript-eslint/visitor-keys@7.18.0':
dependencies:
'@typescript-eslint/types': 7.18.0
eslint-visitor-keys: 3.4.3
'@typescript-eslint/visitor-keys@8.0.1':
dependencies:
'@typescript-eslint/types': 8.0.1
eslint-visitor-keys: 3.4.3
'@typescript-eslint/visitor-keys@8.2.0':
dependencies:
'@typescript-eslint/types': 8.2.0
eslint-visitor-keys: 3.4.3
'@typescript-eslint/visitor-keys@8.41.0':
dependencies:
'@typescript-eslint/types': 8.41.0
eslint-visitor-keys: 4.2.1
'@ungap/structured-clone@1.2.0': {}
'@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/node@20.14.11)(happy-dom@15.10.2)(sass@1.70.0)(terser@5.43.1)(tsx@4.16.2)(yaml@2.5.0))':
@ -14649,6 +14721,8 @@ snapshots:
eslint-visitor-keys@3.4.3: {}
eslint-visitor-keys@4.2.1: {}
eslint-watch@8.0.0(eslint@8.57.1):
dependencies:
chokidar: 3.6.0
@ -14901,6 +14975,14 @@ snapshots:
merge2: 1.4.1
micromatch: 4.0.7
fast-glob@3.3.3:
dependencies:
'@nodelib/fs.stat': 2.0.5
'@nodelib/fs.walk': 1.2.8
glob-parent: 5.1.2
merge2: 1.4.1
micromatch: 4.0.8
fast-json-stable-stringify@2.1.0: {}
fast-json-stringify@2.7.13:
@ -15544,7 +15626,7 @@ snapshots:
array-union: 2.1.0
dir-glob: 3.0.1
fast-glob: 3.3.2
ignore: 5.3.1
ignore: 5.3.2
merge2: 1.4.1
slash: 3.0.0
@ -15811,6 +15893,10 @@ snapshots:
ignore@5.3.1: {}
ignore@5.3.2: {}
ignore@7.0.5: {}
immutable@4.3.7: {}
import-fresh@3.3.0:
@ -16798,6 +16884,11 @@ snapshots:
braces: 3.0.3
picomatch: 2.3.1
micromatch@4.0.8:
dependencies:
braces: 3.0.3
picomatch: 2.3.1
mime-db@1.52.0: {}
mime-db@1.53.0: {}
@ -18588,6 +18679,8 @@ snapshots:
semver@7.6.3: {}
semver@7.7.2: {}
send@0.18.0:
dependencies:
debug: 2.6.9
@ -19474,6 +19567,14 @@ snapshots:
dependencies:
typescript: 5.5.4
ts-api-utils@1.4.3(typescript@5.5.4):
dependencies:
typescript: 5.5.4
ts-api-utils@2.1.0(typescript@5.5.4):
dependencies:
typescript: 5.5.4
ts-deepmerge@6.2.1: {}
ts-graphviz@2.1.2: