diff --git a/.changeset/clean-wombats-join.md b/.changeset/clean-wombats-join.md new file mode 100644 index 0000000..4e5c3f0 --- /dev/null +++ b/.changeset/clean-wombats-join.md @@ -0,0 +1,5 @@ +--- +"@virtual-live-lab/eslint-config": minor +--- + +update to eslint v9, typescript-eslint v8 diff --git a/.vscode/settings.json b/.vscode/settings.json index 7526379..c11bd17 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -11,7 +11,6 @@ "typescript", "typescriptreact" ], - "eslint.experimental.useFlatConfig": true, "eslint.options": { "overrideConfigFile": "eslint.config.mjs" }, diff --git a/package.json b/package.json index e5b1d6b..7aa8bef 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "@virtual-live-lab/prettier-config": "workspace:^", "@virtual-live-lab/stylelint-config": "workspace:^", "@virtual-live-lab/tsconfig": "workspace:^", - "eslint": "^8.57.0", + "eslint": "^9.9.0", "prettier": "^3.3.3", "stylelint": "^16.8.1", "typescript": "5.5.4" diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index edbb840..657d63a 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -25,32 +25,37 @@ "scripts": { "build": "tsup-node" }, + "engines": { + "node": ">= 20.11.0 || >= 21.2.0 || >= 22.0.0" + }, "peerDependencies": { - "eslint": "^8.57.0" + "eslint": "^9.9.0" }, "dependencies": { + "@eslint/compat": "^1.1.1", "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "^8.57.0", - "eslint": "^8.57.0", + "@eslint/js": "^9.9.0", + "eslint": "^9.9.0", "eslint-config-flat-gitignore": "^0.1.8", "eslint-config-prettier": "^9.1.0", "eslint-plugin-astro": "^1.2.3", "eslint-plugin-jsx-a11y": "^6.9.0", - "eslint-plugin-perfectionist": "^2.11.0", + "eslint-plugin-perfectionist": "^3.1.3", "eslint-plugin-react": "^7.35.0", "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-tailwindcss": "^3.17.4", "globals": "^15.9.0", "pkg-dir": "^8.0.0", - "typescript-eslint": "^7.18.0" + "typescript-eslint": "^8.1.0" }, "devDependencies": { - "@types/eslint": "^8.56.11", + "@stylistic/eslint-plugin-ts": "^2.6.2", + "@types/eslint": "^9.6.0", + "@types/eslint-config-prettier": "^6.11.3", "@types/eslint__eslintrc": "^2.1.2", "@types/eslint__js": "^8.42.3", - "@types/eslint-config-prettier": "^6.11.3", "@types/node": "^20.14.15", - "@typescript-eslint/utils": "^7.18.0", + "@typescript-eslint/utils": "^8.1.0", "@virtual-live-lab/tsconfig": "workspace:^", "tsup": "^8.2.4" }, diff --git a/packages/eslint-config/src/addons/jsxA11y.ts b/packages/eslint-config/src/addons/jsxA11y.ts index 7f72d31..617c715 100644 --- a/packages/eslint-config/src/addons/jsxA11y.ts +++ b/packages/eslint-config/src/addons/jsxA11y.ts @@ -1,5 +1,11 @@ +import type { FlatConfig } from "@typescript-eslint/utils/ts-eslint"; + +import { fixupConfigRules } from "@eslint/compat"; + import { compat } from "../lib/compat"; -const jsxA11y = compat.extends("plugin:jsx-a11y/strict"); +const jsxA11y = fixupConfigRules( + compat.extends("plugin:jsx-a11y/strict"), +) satisfies FlatConfig.ConfigArray; export default jsxA11y; diff --git a/packages/eslint-config/src/addons/tailwind.ts b/packages/eslint-config/src/addons/tailwind.ts index 5860126..3ea8f13 100644 --- a/packages/eslint-config/src/addons/tailwind.ts +++ b/packages/eslint-config/src/addons/tailwind.ts @@ -1,27 +1,33 @@ +import type { FlatConfig } from "@typescript-eslint/utils/ts-eslint"; + +import { fixupConfigRules } from "@eslint/compat"; + import { compat } from "../lib/compat"; const tailwind = [ - ...compat.extends("plugin:tailwindcss/recommended"), - ...compat.config({ - /* - tailwind-variantsを併用する際に、`ignoredKeys`に - `responsiveVariants`が追加されていないのでWarningが出る - そのため、こちら側で`ignoredKeys`に`responsiveVariants`を追加している - 本家にPRを送るのでMergeされたらいらなくなる - */ - rules: { - "tailwindcss/no-custom-classname": [ - "warn", - { - ignoredKeys: [ - "compoundVariants", - "defaultVariants", - "responsiveVariants", - ], - }, - ], - }, - }), -]; + ...fixupConfigRules(compat.extends("plugin:tailwindcss/recommended")), + ...fixupConfigRules( + compat.config({ + /* + tailwind-variantsを併用する際に、`ignoredKeys`に + `responsiveVariants`が追加されていないのでWarningが出る + そのため、こちら側で`ignoredKeys`に`responsiveVariants`を追加している + 本家にPRを送るのでMergeされたらいらなくなる + */ + rules: { + "tailwindcss/no-custom-classname": [ + "warn", + { + ignoredKeys: [ + "compoundVariants", + "defaultVariants", + "responsiveVariants", + ], + }, + ], + }, + }), + ), +] satisfies FlatConfig.ConfigArray; export default tailwind; diff --git a/packages/eslint-config/src/base/astro.ts b/packages/eslint-config/src/base/astro.ts index 72fbaab..fd09b1e 100644 --- a/packages/eslint-config/src/base/astro.ts +++ b/packages/eslint-config/src/base/astro.ts @@ -1,12 +1,14 @@ +import type { FlatConfig } from "@typescript-eslint/utils/ts-eslint"; import type { Linter } from "eslint"; import eslintPluginAstro from "eslint-plugin-astro"; -const astroConfig: Linter.FlatConfig[] = [ - ...eslintPluginAstro.configs["flat/recommended"], +const astroConfig = [ + // eslint-plugin-astroの型定義の都合上anyと判定されてしまうので、asを使って型を指定する + ...(eslintPluginAstro.configs["flat/recommended"] as Linter.Config[]), // flat/jsx-a11y-strictは、eslint-plugin-jsx-a11yの設定をベースにしているので、 // インストールされていないとエラーになるが、このパッケージはdependenciesに含まれているので問題ない - ...eslintPluginAstro.configs["flat/jsx-a11y-strict"], -]; + ...(eslintPluginAstro.configs["flat/jsx-a11y-strict"] as Linter.Config[]), +] satisfies FlatConfig.ConfigArray; export { astroConfig }; diff --git a/packages/eslint-config/src/base/js.ts b/packages/eslint-config/src/base/js.ts index 764a1c6..c521645 100644 --- a/packages/eslint-config/src/base/js.ts +++ b/packages/eslint-config/src/base/js.ts @@ -1,8 +1,11 @@ -import type { Linter } from "eslint"; +import type { FlatConfig } from "@typescript-eslint/utils/ts-eslint"; import js from "@eslint/js"; import gitignore from "eslint-config-flat-gitignore"; -const jsConfig: Linter.FlatConfig[] = [gitignore(), js.configs.recommended]; +const jsConfig = [ + gitignore(), + js.configs.recommended, +] satisfies FlatConfig.ConfigArray; export { jsConfig }; diff --git a/packages/eslint-config/src/base/nextjs.ts b/packages/eslint-config/src/base/nextjs.ts index 13e92da..50385a0 100644 --- a/packages/eslint-config/src/base/nextjs.ts +++ b/packages/eslint-config/src/base/nextjs.ts @@ -1,9 +1,11 @@ -import type { Linter } from "eslint"; +import type { FlatConfig } from "@typescript-eslint/utils/ts-eslint"; + +import { fixupConfigRules } from "@eslint/compat"; import { compat } from "../lib/compat"; import { reactConfig } from "./react"; -const nextJsConfig: Linter.FlatConfig[] = [ +const nextJsConfig = [ ...reactConfig, /* この設定は、利用側のnode_modulesからnext/core-web-vitalsを探すので、 @@ -12,7 +14,7 @@ const nextJsConfig: Linter.FlatConfig[] = [ Flat対応に際して、このpackageでeslint-config-nextを持ちたくないので、 Next.jsプリセットを削除するBreaking Changeを行う可能性が高い */ - ...compat.extends("next/core-web-vitals"), -]; + ...fixupConfigRules(compat.extends("next/core-web-vitals")), +] satisfies FlatConfig.ConfigArray; export { nextJsConfig }; diff --git a/packages/eslint-config/src/base/react.ts b/packages/eslint-config/src/base/react.ts index e836802..0dc3e4d 100644 --- a/packages/eslint-config/src/base/react.ts +++ b/packages/eslint-config/src/base/react.ts @@ -1,38 +1,32 @@ -import type { Linter } from "eslint"; +import type { FlatConfig } from "@typescript-eslint/utils/ts-eslint"; -//@ts-expect-error no types -import react from "eslint-plugin-react"; -//@ts-expect-error no types -import reactRecommended from "eslint-plugin-react/configs/recommended.js"; +import { fixupConfigRules } from "@eslint/compat"; import globals from "globals"; import { compat } from "../lib/compat"; -// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -const reactConfig: Linter.FlatConfig[] = [ - ...compat.extends("plugin:react-hooks/recommended"), - { - files: ["**/*.{js,cjs,mjs,ts,cts,mts,jsx,tsx}"], - ...reactRecommended, - languageOptions: { + +const reactConfig = [ + ...fixupConfigRules([ + ...compat.extends( + "plugin:react/recommended", + "plugin:react/jsx-runtime", + "plugin:react-hooks/recommended", + ), + ...compat.config({ globals: { ...globals.browser, }, - parserOptions: { - ecmaFeatures: { - jsx: true, + rules: { + "react/jsx-boolean-value": "warn", + "react/jsx-curly-brace-presence": "error", + }, + settings: { + react: { + version: "detect", }, }, - }, - plugins: { - // no types - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - react, - }, - rules: { - "react/jsx-boolean-value": "warn", - "react/jsx-curly-brace-presence": "error", - }, - }, -]; + }), + ]), +] satisfies FlatConfig.ConfigArray; export { reactConfig }; diff --git a/packages/eslint-config/src/base/stylistic.ts b/packages/eslint-config/src/base/stylistic.ts index 6770b42..75a2408 100644 --- a/packages/eslint-config/src/base/stylistic.ts +++ b/packages/eslint-config/src/base/stylistic.ts @@ -1,42 +1,38 @@ -import type { Linter } from "eslint"; +import type { FlatConfig } from "@typescript-eslint/utils/ts-eslint"; import prettierConfig from "eslint-config-prettier"; -// @ts-expect-error no types -import perfectionistNatural from "eslint-plugin-perfectionist/configs/recommended-natural"; +import perfectionistPlugin from "eslint-plugin-perfectionist"; -// eslint-plugin-perfectionist has no types -// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -const stylisticConfig: Linter.FlatConfig[] = [ +const stylisticConfig = [ prettierConfig, - perfectionistNatural, + perfectionistPlugin.configs["recommended-natural"], { rules: { "perfectionist/sort-object-types": [ "error", { - "order": "asc", - "partition-by-new-line": true, - "type": "natural", + order: "asc", + partitionByNewLine: true, + type: "natural", }, ], "perfectionist/sort-objects": [ "error", { - "order": "asc", - "partition-by-new-line": true, - "type": "natural", + order: "asc", + partitionByNewLine: true, + type: "natural", }, ], "perfectionist/sort-union-types": [ "error", { - "nullable-last": true, - "order": "asc", - "type": "natural", + order: "asc", + type: "natural", }, ], }, }, -]; +] satisfies FlatConfig.ConfigArray; export { stylisticConfig }; diff --git a/packages/eslint-config/src/base/typescript.ts b/packages/eslint-config/src/base/typescript.ts index 74784e6..4b5985e 100644 --- a/packages/eslint-config/src/base/typescript.ts +++ b/packages/eslint-config/src/base/typescript.ts @@ -1,20 +1,28 @@ +import stylisticTs from "@stylistic/eslint-plugin-ts"; +import gitignore from "eslint-config-flat-gitignore"; import tseslint from "typescript-eslint"; -import { __dirname } from "../lib/dir"; - const tsConfig = tseslint.config({ extends: [ + gitignore(), ...tseslint.configs.recommendedTypeChecked, ...tseslint.configs.stylisticTypeChecked, ], languageOptions: { parserOptions: { - project: true, - tsconfigRootDir: __dirname, + projectService: { + allowDefaultProject: ["*.js", "*.mjs", "*.cjs"], + }, + tsconfigRootDir: import.meta.dirname, }, }, + plugins: { + "@stylistic/ts": stylisticTs, + }, rules: { // SEE: https://zenn.dev/cybozu_frontend/articles/ts-eslint-v6-guide + // v6 で recommended から削除されたものを有効化 + "@stylistic/ts/no-extra-semi": "error", // stylistic を有効にしたため v5 の recommended にないルールを無効化 "@typescript-eslint/array-type": "off", "@typescript-eslint/ban-tslint-comment": "off", @@ -27,8 +35,6 @@ const tsConfig = tseslint.config({ "@typescript-eslint/no-confusing-non-null-assertion": "off", // v6 で recommended に追加されたルールを無効化 "@typescript-eslint/no-duplicate-enum-values": "off", - // v6 で recommended から削除されたものを有効化 - "@typescript-eslint/no-extra-semi": "error", "@typescript-eslint/no-import-type-side-effects": "error", // this is for react-hook-form "@typescript-eslint/no-misused-promises": [ diff --git a/packages/eslint-config/src/presets/astro.ts b/packages/eslint-config/src/presets/astro.ts index 87d294f..f463262 100644 --- a/packages/eslint-config/src/presets/astro.ts +++ b/packages/eslint-config/src/presets/astro.ts @@ -1,4 +1,4 @@ -import type { TSESLint } from "@typescript-eslint/utils"; +import type { FlatConfig } from "@typescript-eslint/utils/ts-eslint"; import tseslint from "typescript-eslint"; @@ -6,10 +6,10 @@ import { astroConfig } from "../base/astro"; import { reactConfig } from "../base/react"; import ts from "./ts"; -const astro: TSESLint.FlatConfig.ConfigArray = tseslint.config( +const astro = tseslint.config( ...ts, ...astroConfig, ...reactConfig, -); +) satisfies FlatConfig.ConfigArray; export default astro; diff --git a/packages/eslint-config/src/presets/js.ts b/packages/eslint-config/src/presets/js.ts index f545b8f..6b98e71 100644 --- a/packages/eslint-config/src/presets/js.ts +++ b/packages/eslint-config/src/presets/js.ts @@ -1,6 +1,8 @@ +import type { FlatConfig } from "@typescript-eslint/utils/ts-eslint"; + import { jsConfig } from "../base/js"; import { stylisticConfig } from "../base/stylistic"; -const js = [...jsConfig, ...stylisticConfig]; +const js = [...jsConfig, ...stylisticConfig] satisfies FlatConfig.ConfigArray; export default js; diff --git a/packages/eslint-config/src/presets/nextjs.ts b/packages/eslint-config/src/presets/nextjs.ts index 5cac09e..6f76a2c 100644 --- a/packages/eslint-config/src/presets/nextjs.ts +++ b/packages/eslint-config/src/presets/nextjs.ts @@ -1,13 +1,13 @@ -import type { TSESLint } from "@typescript-eslint/utils"; +import type { FlatConfig } from "@typescript-eslint/utils/ts-eslint"; import tseslint from "typescript-eslint"; import { nextJsConfig } from "../base/nextjs"; import ts from "./ts"; -const react: TSESLint.FlatConfig.ConfigArray = tseslint.config( +const react = tseslint.config( ...ts, ...nextJsConfig, -); +) satisfies FlatConfig.ConfigArray; export default react; diff --git a/packages/eslint-config/src/presets/react.ts b/packages/eslint-config/src/presets/react.ts index 275bb6c..3984eea 100644 --- a/packages/eslint-config/src/presets/react.ts +++ b/packages/eslint-config/src/presets/react.ts @@ -1,13 +1,13 @@ -import type { TSESLint } from "@typescript-eslint/utils"; +import type { FlatConfig } from "@typescript-eslint/utils/ts-eslint"; import tseslint from "typescript-eslint"; import { reactConfig } from "../base/react"; import ts from "./ts"; -const react: TSESLint.FlatConfig.ConfigArray = tseslint.config( +const react = tseslint.config( ...ts, ...reactConfig, -); +) satisfies FlatConfig.ConfigArray; export default react; diff --git a/packages/eslint-config/src/presets/ts.ts b/packages/eslint-config/src/presets/ts.ts index 47238de..02b1ec4 100644 --- a/packages/eslint-config/src/presets/ts.ts +++ b/packages/eslint-config/src/presets/ts.ts @@ -1,11 +1,10 @@ -import type { TSESLint } from "@typescript-eslint/utils"; +import type { FlatConfig } from "@typescript-eslint/utils/ts-eslint"; import tseslint from "typescript-eslint"; import { tsConfig } from "../base/typescript"; import js from "./js"; -// eslint-disable-next-line @typescript-eslint/no-unsafe-argument -const ts: TSESLint.FlatConfig.ConfigArray = tseslint.config(...js, ...tsConfig); +const ts = tseslint.config(...js, ...tsConfig) satisfies FlatConfig.ConfigArray; export default ts; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0496b61..7c6a851 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,8 +27,8 @@ importers: specifier: workspace:^ version: link:packages/tsconfig eslint: - specifier: ^8.57.0 - version: 8.57.0 + specifier: ^9.9.0 + version: 9.9.0 prettier: specifier: ^3.3.3 version: 3.3.3 @@ -41,36 +41,39 @@ importers: packages/eslint-config: dependencies: + '@eslint/compat': + specifier: ^1.1.1 + version: 1.1.1 '@eslint/eslintrc': specifier: ^3.1.0 version: 3.1.0 '@eslint/js': - specifier: ^8.57.0 - version: 8.57.0 + specifier: ^9.9.0 + version: 9.9.0 eslint: - specifier: ^8.57.0 - version: 8.57.0 + specifier: ^9.9.0 + version: 9.9.0 eslint-config-flat-gitignore: specifier: ^0.1.8 version: 0.1.8 eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@8.57.0) + version: 9.1.0(eslint@9.9.0) eslint-plugin-astro: specifier: ^1.2.3 - version: 1.2.3(eslint@8.57.0)(typescript@5.5.4) + version: 1.2.3(eslint@9.9.0)(typescript@5.5.4) eslint-plugin-jsx-a11y: specifier: ^6.9.0 - version: 6.9.0(eslint@8.57.0) + version: 6.9.0(eslint@9.9.0) eslint-plugin-perfectionist: - specifier: ^2.11.0 - version: 2.11.0(eslint@8.57.0)(typescript@5.5.4) + specifier: ^3.1.3 + version: 3.1.3(eslint@9.9.0)(typescript@5.5.4) eslint-plugin-react: specifier: ^7.35.0 - version: 7.35.0(eslint@8.57.0) + version: 7.35.0(eslint@9.9.0) eslint-plugin-react-hooks: specifier: ^4.6.2 - version: 4.6.2(eslint@8.57.0) + version: 4.6.2(eslint@9.9.0) eslint-plugin-tailwindcss: specifier: ^3.17.4 version: 3.17.4(tailwindcss@3.4.3) @@ -81,12 +84,15 @@ importers: specifier: ^8.0.0 version: 8.0.0 typescript-eslint: - specifier: ^7.18.0 - version: 7.18.0(eslint@8.57.0)(typescript@5.5.4) + specifier: ^8.1.0 + version: 8.1.0(eslint@9.9.0)(typescript@5.5.4) devDependencies: + '@stylistic/eslint-plugin-ts': + specifier: ^2.6.2 + version: 2.6.2(eslint@9.9.0)(typescript@5.5.4) '@types/eslint': - specifier: ^8.56.11 - version: 8.56.11 + specifier: ^9.6.0 + version: 9.6.0 '@types/eslint-config-prettier': specifier: ^6.11.3 version: 6.11.3 @@ -100,8 +106,8 @@ importers: specifier: ^20.14.15 version: 20.14.15 '@typescript-eslint/utils': - specifier: ^7.18.0 - version: 7.18.0(eslint@8.57.0)(typescript@5.5.4) + specifier: ^8.1.0 + version: 8.1.0(eslint@9.9.0)(typescript@5.5.4) '@virtual-live-lab/tsconfig': specifier: workspace:^ version: link:../tsconfig @@ -701,32 +707,31 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): + /@eslint-community/eslint-utils@4.4.0(eslint@9.9.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.57.0 + eslint: 9.9.0 eslint-visitor-keys: 3.4.3 - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + /@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/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@eslint/compat@1.1.1: + resolution: {integrity: sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: false + + /@eslint/config-array@0.17.1: + resolution: {integrity: sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - ajv: 6.12.6 - debug: 4.3.5 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 + '@eslint/object-schema': 2.1.4 + debug: 4.3.6 minimatch: 3.1.2 - strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color @@ -745,28 +750,22 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: false - /@eslint/js@8.57.0: - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@eslint/js@9.9.0: + resolution: {integrity: sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.5 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + /@eslint/object-schema@2.1.4: + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} /@humanwhocodes/module-importer@1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - /@humanwhocodes/object-schema@2.0.3: - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + /@humanwhocodes/retry@0.3.0: + resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} + engines: {node: '>=18.18'} /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -981,12 +980,40 @@ packages: dev: true optional: true + /@stylistic/eslint-plugin-js@2.6.2(eslint@9.9.0): + resolution: {integrity: sha512-wCr/kVctAPayMU3pcOI1MKR7MoKIh6VKZU89lPklAqtJoxT+Em6RueiiARbpznUYG5eg3LymiU+aMD+aIZXdqA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + '@types/eslint': 9.6.0 + acorn: 8.12.1 + eslint: 9.9.0 + eslint-visitor-keys: 4.0.0 + espree: 10.1.0 + dev: true + + /@stylistic/eslint-plugin-ts@2.6.2(eslint@9.9.0)(typescript@5.5.4): + resolution: {integrity: sha512-6OEN3VtUNxjgOvWPavnC10MByr1H4zsgwNND3rQXr5lDFv93MLUnTsH+/SH15OkuqdyJgrQILI6b9lYecb1vIg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + '@stylistic/eslint-plugin-js': 2.6.2(eslint@9.9.0) + '@types/eslint': 9.6.0 + '@typescript-eslint/utils': 8.1.0(eslint@9.9.0)(typescript@5.5.4) + eslint: 9.9.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /@types/eslint-config-prettier@6.11.3: resolution: {integrity: sha512-3wXCiM8croUnhg9LdtZUJQwNcQYGWxxdOWDjPe1ykCqJFPVpzAKfs/2dgSoCtAvdPeaponcWPI7mPcGGp9dkKQ==} dev: true - /@types/eslint@8.56.11: - resolution: {integrity: sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==} + /@types/eslint@9.6.0: + resolution: {integrity: sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==} dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 @@ -995,13 +1022,13 @@ packages: /@types/eslint__eslintrc@2.1.2: resolution: {integrity: sha512-qXvzPFY7Rz05xD8ZApXJ3S8xStQD2Ibzu3EFIF0UMNOAfLY5xUu3H61q0JrHo2OXD6rcFG75yUxNQbkKtFKBSw==} dependencies: - '@types/eslint': 8.56.11 + '@types/eslint': 9.6.0 dev: true /@types/eslint__js@8.42.3: resolution: {integrity: sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==} dependencies: - '@types/eslint': 8.56.11 + '@types/eslint': 9.6.0 dev: true /@types/estree@1.0.5: @@ -1026,24 +1053,24 @@ packages: resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true - /@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.0)(typescript@5.5.4): - resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} - engines: {node: ^18.18.0 || >=20.0.0} + /@typescript-eslint/eslint-plugin@8.1.0(@typescript-eslint/parser@8.1.0)(eslint@9.9.0)(typescript@5.5.4): + resolution: {integrity: sha512-LlNBaHFCEBPHyD4pZXb35mzjGkuGKXU5eeCA1SxvHfiRES0E82dOounfVpL4DCqYvJEKab0bZIA0gCRpdLKkCw==} + 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 dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 7.18.0 - eslint: 8.57.0 + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 8.1.0(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/scope-manager': 8.1.0 + '@typescript-eslint/type-utils': 8.1.0(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/utils': 8.1.0(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.1.0 + eslint: 9.9.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 @@ -1053,22 +1080,22 @@ packages: - supports-color dev: false - /@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4): - resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} - engines: {node: ^18.18.0 || >=20.0.0} + /@typescript-eslint/parser@8.1.0(eslint@9.9.0)(typescript@5.5.4): + resolution: {integrity: sha512-U7iTAtGgJk6DPX9wIWPPOlt1gO57097G06gIcl0N0EEnNw8RGD62c+2/DiP/zL7KrkqnnqF7gtFGR7YgzPllTA==} + 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 dependencies: - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 7.18.0 + '@typescript-eslint/scope-manager': 8.1.0 + '@typescript-eslint/types': 8.1.0 + '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.1.0 debug: 4.3.6 - eslint: 8.57.0 + eslint: 9.9.0 typescript: 5.5.4 transitivePeerDependencies: - supports-color @@ -1080,24 +1107,31 @@ packages: dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 + dev: false - /@typescript-eslint/type-utils@7.18.0(eslint@8.57.0)(typescript@5.5.4): - resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} - engines: {node: ^18.18.0 || >=20.0.0} + /@typescript-eslint/scope-manager@8.1.0: + resolution: {integrity: sha512-DsuOZQji687sQUjm4N6c9xABJa7fjvfIdjqpSIIVOgaENf2jFXiM9hIBZOL3hb6DHK9Nvd2d7zZnoMLf9e0OtQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + '@typescript-eslint/types': 8.1.0 + '@typescript-eslint/visitor-keys': 8.1.0 + + /@typescript-eslint/type-utils@8.1.0(eslint@9.9.0)(typescript@5.5.4): + resolution: {integrity: sha512-oLYvTxljVvsMnldfl6jIKxTaU7ok7km0KDrwOt1RHYu6nxlhN3TIx8k5Q52L6wR33nOwDgM7VwW1fT1qMNfFIA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.5.4) + '@typescript-eslint/utils': 8.1.0(eslint@9.9.0)(typescript@5.5.4) debug: 4.3.6 - eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.5.4) typescript: 5.5.4 transitivePeerDependencies: + - eslint - supports-color dev: false @@ -1109,6 +1143,11 @@ packages: /@typescript-eslint/types@7.18.0: resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} + dev: false + + /@typescript-eslint/types@8.1.0: + resolution: {integrity: sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} /@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4): resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} @@ -1130,18 +1169,40 @@ packages: typescript: 5.5.4 transitivePeerDependencies: - supports-color + dev: false - /@typescript-eslint/utils@7.18.0(eslint@8.57.0)(typescript@5.5.4): - resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} - engines: {node: ^18.18.0 || >=20.0.0} + /@typescript-eslint/typescript-estree@8.1.0(typescript@5.5.4): + resolution: {integrity: sha512-NTHhmufocEkMiAord/g++gWKb0Fr34e9AExBRdqgWdVBaKoei2dIyYKD9Q0jBnvfbEA5zaf8plUFMUH6kQ0vGg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) - eslint: 8.57.0 + '@typescript-eslint/types': 8.1.0 + '@typescript-eslint/visitor-keys': 8.1.0 + debug: 4.3.6 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.4 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + /@typescript-eslint/utils@8.1.0(eslint@9.9.0)(typescript@5.5.4): + resolution: {integrity: sha512-ypRueFNKTIFwqPeJBfeIpxZ895PQhNyH4YID6js0UoBImWYoSjBsahUn9KMiJXh94uOjVBgHD9AmkyPsPnFwJA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) + '@typescript-eslint/scope-manager': 8.1.0 + '@typescript-eslint/types': 8.1.0 + '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.5.4) + eslint: 9.9.0 transitivePeerDependencies: - supports-color - typescript @@ -1152,9 +1213,14 @@ packages: dependencies: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 + dev: false - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + /@typescript-eslint/visitor-keys@8.1.0: + resolution: {integrity: sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + '@typescript-eslint/types': 8.1.0 + eslint-visitor-keys: 3.4.3 /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -1163,11 +1229,23 @@ packages: dependencies: acorn: 8.11.3 + /acorn-jsx@5.3.2(acorn@8.12.1): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.12.1 + /acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true + /acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: @@ -1706,12 +1784,6 @@ packages: esutils: 2.0.3 dev: false - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - /dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} dependencies: @@ -1944,13 +2016,13 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - /eslint-compat-utils@0.5.0(eslint@8.57.0): + /eslint-compat-utils@0.5.0(eslint@9.9.0): resolution: {integrity: sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==} engines: {node: '>=12'} peerDependencies: eslint: '>=6.0.0' dependencies: - eslint: 8.57.0 + eslint: 9.9.0 semver: 7.6.0 dev: false @@ -1961,27 +2033,27 @@ packages: parse-gitignore: 2.0.0 dev: false - /eslint-config-prettier@9.1.0(eslint@8.57.0): + /eslint-config-prettier@9.1.0(eslint@9.9.0): resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.57.0 + eslint: 9.9.0 dev: false - /eslint-plugin-astro@1.2.3(eslint@8.57.0)(typescript@5.5.4): + /eslint-plugin-astro@1.2.3(eslint@9.9.0)(typescript@5.5.4): resolution: {integrity: sha512-asHT0VUs68oppVnTHfp/WgLqs0yCx9kG9AC/PKLmp+87imeh3nGHMdFm0qP46vHxTM0NLDEhvmjFdAVAqw+QPQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.57.0' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) '@jridgewell/sourcemap-codec': 1.4.15 '@typescript-eslint/types': 7.14.1 astro-eslint-parser: 1.0.2(typescript@5.5.4) - eslint: 8.57.0 - eslint-compat-utils: 0.5.0(eslint@8.57.0) + eslint: 9.9.0 + eslint-compat-utils: 0.5.0(eslint@9.9.0) globals: 15.9.0 postcss: 8.4.38 postcss-selector-parser: 6.1.0 @@ -1990,7 +2062,7 @@ packages: - typescript dev: false - /eslint-plugin-jsx-a11y@6.9.0(eslint@8.57.0): + /eslint-plugin-jsx-a11y@6.9.0(eslint@9.9.0): resolution: {integrity: sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==} engines: {node: '>=4.0'} peerDependencies: @@ -2005,7 +2077,7 @@ packages: damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 es-iterator-helpers: 1.0.19 - eslint: 8.57.0 + eslint: 9.9.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -2015,13 +2087,14 @@ packages: string.prototype.includes: 2.0.0 dev: false - /eslint-plugin-perfectionist@2.11.0(eslint@8.57.0)(typescript@5.5.4): - resolution: {integrity: sha512-XrtBtiu5rbQv88gl+1e2RQud9te9luYNvKIgM9emttQ2zutHPzY/AQUucwxscDKV4qlTkvLTxjOFvxqeDpPorw==} + /eslint-plugin-perfectionist@3.1.3(eslint@9.9.0)(typescript@5.5.4): + resolution: {integrity: sha512-eFRkBvMnnHjle5MuqTzoTIukWIr7Gm2wXvhTj3HyT/ku2J5oj7quBRbvZ8iYkjPyUFBpir3ZBnVQ5vFYswvpQg==} + engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: astro-eslint-parser: ^1.0.2 eslint: '>=8.0.0' svelte: '>=3.0.0' - svelte-eslint-parser: ^0.37.0 + svelte-eslint-parser: ^0.41.0 vue-eslint-parser: '>=9.0.0' peerDependenciesMeta: astro-eslint-parser: @@ -2033,25 +2106,26 @@ packages: vue-eslint-parser: optional: true dependencies: - '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - eslint: 8.57.0 - minimatch: 9.0.4 + '@typescript-eslint/types': 8.1.0 + '@typescript-eslint/utils': 8.1.0(eslint@9.9.0)(typescript@5.5.4) + eslint: 9.9.0 + minimatch: 10.0.1 natural-compare-lite: 1.4.0 transitivePeerDependencies: - supports-color - typescript dev: false - /eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): + /eslint-plugin-react-hooks@4.6.2(eslint@9.9.0): resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.57.0 + eslint: 9.9.0 dev: false - /eslint-plugin-react@7.35.0(eslint@8.57.0): + /eslint-plugin-react@7.35.0(eslint@9.9.0): resolution: {integrity: sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==} engines: {node: '>=4'} peerDependencies: @@ -2063,7 +2137,7 @@ packages: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.0.19 - eslint: 8.57.0 + eslint: 9.9.0 estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -2089,20 +2163,20 @@ packages: tailwindcss: 3.4.3 dev: false - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /eslint-scope@8.0.1: + resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 + dev: false - /eslint-scope@8.0.1: - resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==} + /eslint-scope@8.0.2: + resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: false /eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} @@ -2111,43 +2185,43 @@ packages: /eslint-visitor-keys@4.0.0: resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - dev: false - /eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /eslint@9.9.0: + resolution: {integrity: sha512-JfiKJrbx0506OEerjK2Y1QlldtBxkAlLxT5OEcRF8uaQ86noDe2k31Vw9rnSWv+MXZHj7OOUV/dA0AhdLFcyvA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) + '@eslint-community/regexpp': 4.11.0 + '@eslint/config-array': 0.17.1 + '@eslint/eslintrc': 3.1.0 + '@eslint/js': 9.9.0 '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.3.0 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 + debug: 4.3.6 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-scope: 8.0.2 + eslint-visitor-keys: 4.0.0 + espree: 10.1.0 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 @@ -2166,15 +2240,14 @@ packages: acorn: 8.11.3 acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 4.0.0 - dev: false - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /espree@10.1.0: + resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) - eslint-visitor-keys: 3.4.3 + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 4.0.0 /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} @@ -2258,11 +2331,11 @@ packages: dependencies: reusify: 1.0.4 - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + /file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} dependencies: - flat-cache: 3.2.0 + flat-cache: 4.0.1 /file-entry-cache@9.0.0: resolution: {integrity: sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw==} @@ -2303,13 +2376,12 @@ packages: pkg-dir: 4.2.0 dev: true - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + /flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} dependencies: flatted: 3.3.1 keyv: 4.5.4 - rimraf: 3.0.2 /flat-cache@5.0.0: resolution: {integrity: sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==} @@ -2352,9 +2424,6 @@ packages: universalify: 0.1.2 dev: true - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -2428,16 +2497,6 @@ packages: minipass: 7.0.4 path-scurry: 1.10.2 - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - /global-modules@2.0.0: resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} engines: {node: '>=6'} @@ -2452,16 +2511,9 @@ packages: kind-of: 6.0.3 which: 1.3.1 - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - /globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - dev: false /globals@15.9.0: resolution: {integrity: sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==} @@ -2501,6 +2553,7 @@ packages: /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: false /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} @@ -2588,15 +2641,6 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} @@ -3042,6 +3086,13 @@ packages: engines: {node: '>=6'} dev: true + /minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + dependencies: + brace-expansion: 2.0.1 + dev: false + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: @@ -3171,11 +3222,6 @@ packages: es-object-atoms: 1.0.0 dev: false - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -3270,10 +3316,6 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -3630,12 +3672,6 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - dependencies: - glob: 7.2.3 - /rollup@4.19.0: resolution: {integrity: sha512-5r7EYSQIowHsK4eTZ0Y81qpZuJz+MUuYeqmmYmRMl1nwhdmbiYqt5jwzf6u7wyOzJgYqtCRMtVRKOtHANBz7rA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -4309,10 +4345,6 @@ packages: dependencies: prelude-ls: 1.2.1 - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - /typed-array-buffer@1.0.2: resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} @@ -4357,22 +4389,21 @@ packages: possible-typed-array-names: 1.0.0 dev: false - /typescript-eslint@7.18.0(eslint@8.57.0)(typescript@5.5.4): - resolution: {integrity: sha512-PonBkP603E3tt05lDkbOMyaxJjvKqQrXsnow72sVeOFINDE/qNmnnd+f9b4N+U7W6MXnnYyrhtmF2t08QWwUbA==} - engines: {node: ^18.18.0 || >=20.0.0} + /typescript-eslint@8.1.0(eslint@9.9.0)(typescript@5.5.4): + resolution: {integrity: sha512-prB2U3jXPJLpo1iVLN338Lvolh6OrcCZO+9Yv6AR+tvegPPptYCDBIHiEEUdqRi8gAv2bXNKfMUrgAd2ejn/ow==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - eslint: 8.57.0 + '@typescript-eslint/eslint-plugin': 8.1.0(@typescript-eslint/parser@8.1.0)(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/parser': 8.1.0(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/utils': 8.1.0(eslint@9.9.0)(typescript@5.5.4) typescript: 5.5.4 transitivePeerDependencies: + - eslint - supports-color dev: false @@ -4516,9 +4547,6 @@ packages: string-width: 5.1.2 strip-ansi: 7.1.0 - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - /write-file-atomic@5.0.1: resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}