From 2f56413042b6f4081dd30f1ecf50e527887b3d73 Mon Sep 17 00:00:00 2001 From: Jason Date: Mon, 15 Apr 2024 16:05:10 +0800 Subject: [PATCH] lint: upgrade eslint to version 9 (#10730) --- .eslintignore | 9 - .eslintrc.cjs | 158 ---------- eslint.config.js | 206 +++++++++++++ package.json | 10 +- .../utils/vendor/image-size/types/svg.ts | 1 - packages/astro/src/core/build/generate.ts | 2 +- .../src/runtime/server/render/component.ts | 1 + packages/db/src/runtime/errors.ts | 2 +- pnpm-lock.yaml | 276 +++++++++--------- 9 files changed, 351 insertions(+), 314 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.cjs create mode 100644 eslint.config.js diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 2b3b5903586c..000000000000 --- a/.eslintignore +++ /dev/null @@ -1,9 +0,0 @@ -**/*.d.ts -packages/**/*.min.js -packages/**/dist/**/* -packages/**/fixtures/**/* -packages/astro/vendor/vite/**/* -examples/**/* -scripts/**/* -.github -.changeset diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index 78cf3eb9a67f..000000000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,158 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-var-requires -const { builtinModules } = require('module'); - -/** @type {import("@types/eslint").Linter.Config} */ -module.exports = { - extends: [ - 'plugin:@typescript-eslint/recommended-type-checked', - 'plugin:@typescript-eslint/stylistic-type-checked', - 'prettier', - 'plugin:regexp/recommended', - ], - parser: '@typescript-eslint/parser', - parserOptions: { - project: ['./packages/*/tsconfig.json', './tsconfig.eslint.json'], - tsconfigRootDir: __dirname, - }, - plugins: ['@typescript-eslint', 'prettier', 'no-only-tests', 'regexp'], - rules: { - // These off/configured-differently-by-default rules fit well for us - '@typescript-eslint/switch-exhaustiveness-check': 'error', - '@typescript-eslint/array-type': ['error', { default: 'array-simple' }], - '@typescript-eslint/no-unused-vars': [ - 'warn', - { - argsIgnorePattern: '^_', - varsIgnorePattern: '^_', - caughtErrorsIgnorePattern: '^_', - ignoreRestSiblings: true, - }, - ], - 'no-only-tests/no-only-tests': 'error', - '@typescript-eslint/no-shadow': ['error'], - 'no-console': 'warn', - - // Todo: do we want these? - '@typescript-eslint/array-type': 'off', - '@typescript-eslint/ban-ts-comment': 'off', - '@typescript-eslint/class-literal-property-style': 'off', - '@typescript-eslint/consistent-indexed-object-style': 'off', - '@typescript-eslint/consistent-type-definitions': 'off', - '@typescript-eslint/dot-notation': 'off', - '@typescript-eslint/no-base-to-string': 'off', - '@typescript-eslint/no-empty-function': 'off', - '@typescript-eslint/no-floating-promises': 'off', - '@typescript-eslint/no-misused-promises': 'off', - '@typescript-eslint/no-redundant-type-constituents': 'off', - '@typescript-eslint/no-this-alias': 'off', - '@typescript-eslint/no-unsafe-argument': 'off', - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - '@typescript-eslint/no-unsafe-return': 'off', - '@typescript-eslint/prefer-nullish-coalescing': 'off', - '@typescript-eslint/prefer-optional-chain': 'off', - '@typescript-eslint/prefer-string-starts-ends-with': 'off', - '@typescript-eslint/require-await': 'off', - '@typescript-eslint/restrict-plus-operands': 'off', - '@typescript-eslint/restrict-template-expressions': 'off', - '@typescript-eslint/sort-type-constituents': 'off', - '@typescript-eslint/unbound-method': 'off', - '@typescript-eslint/no-explicit-any': 'off', - - // Enforce separate type imports for type-only imports to avoid bundling unneeded code - '@typescript-eslint/consistent-type-imports': [ - 'error', - { - prefer: 'type-imports', - fixStyle: 'separate-type-imports', - disallowTypeAnnotations: false, - }, - ], - - // These rules enabled by the preset configs don't work well for us - '@typescript-eslint/await-thenable': 'off', - 'prefer-const': 'off', - - // In some cases, using explicit letter-casing is more performant than the `i` flag - 'regexp/use-ignore-case': 'off', - }, - overrides: [ - { - // Ensure Node builtins aren't included in Astro's server runtime - files: ['packages/astro/src/runtime/**/*.ts'], - rules: { - 'no-restricted-imports': [ - 'error', - { - paths: [...builtinModules], - patterns: ['node:*'], - }, - ], - }, - }, - { - files: ['packages/astro/src/runtime/client/**/*.ts'], - env: { - browser: true, - }, - }, - { - files: ['packages/**/test/*.js', 'packages/**/*.js'], - env: { - mocha: true, - }, - globals: { - globalThis: false, // false means read-only - }, - rules: { - 'no-console': 'off', - }, - }, - { - files: ['packages/integrations/**/*.ts'], - rules: { - 'no-console': ['error', { allow: ['warn', 'error', 'info', 'debug'] }], - }, - }, - { - files: ['benchmark/**/*.js'], - rules: { - '@typescript-eslint/no-unused-vars': 'off', - 'no-console': 'off', - }, - }, - { - files: ['packages/db/**/cli/**/*.ts'], - rules: { - 'no-console': 'off', - }, - }, - { - files: ['packages/astro/src/core/errors/errors-data.ts'], - rules: { - // This file is used for docs generation, as such the code need to be in a certain format, we can somewhat ensure this with these rules - 'object-shorthand': ['error', 'methods', { avoidExplicitReturnArrows: true }], - 'arrow-body-style': ['error', 'never'], - }, - }, - - { - files: ['packages/db/src/runtime/**/*.ts'], - rules: { - 'no-restricted-imports': 'off', - '@typescript-eslint/no-restricted-imports': [ - 'error', - { - patterns: [ - { - group: ['../core/*'], - allowTypeImports: true, - }, - ], - }, - ], - }, - }, - ], -}; diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 000000000000..230d06a2162a --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,206 @@ +import path from 'node:path'; +import {fileURLToPath} from 'node:url'; +import {builtinModules} from "node:module"; + +import {FlatCompat} from "@eslint/eslintrc"; +import tseslint from 'typescript-eslint'; + +// plugins +import prettierEslint from 'eslint-plugin-prettier'; +import noOnlyTestsEslint from 'eslint-plugin-no-only-tests'; +import regexpEslint from 'eslint-plugin-regexp' +const typescriptEslint = tseslint.plugin; + +// parsers +const typescriptParser = tseslint.parser; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +// ref: https://eslint.org/docs/latest/use/configure/migration-guide#using-eslintrc-configs-in-flat-config +// mimic CommonJS variables -- not needed if using CommonJS +const compat = new FlatCompat({ + baseDirectory: __dirname +}); + +export default [ + // If ignores is used without any other keys in the configuration object, then the patterns act as global ignores. + // ref: https://eslint.org/docs/latest/use/configure/configuration-files#globally-ignoring-files-with-ignores + { + ignores: [ + "**/.*", + "**/*.d.ts", + "packages/**/*.min.js", + "packages/**/dist/", + "packages/**/fixtures/", + "packages/astro/vendor/vite/", + "benchmark/**/dist/", + "examples/", + "scripts/", + ".github/", + ".changeset/", + ] + }, + + ...tseslint.configs.recommendedTypeChecked, + ...tseslint.configs.stylisticTypeChecked, + // mimic ESLintRC-style extends + ...compat.extends('prettier'), + ...compat.extends('plugin:regexp/recommended'), + { + languageOptions: { + parser: typescriptParser, + parserOptions: { + project: ['./packages/*/tsconfig.json', './tsconfig.eslint.json'], + tsconfigRootDir: __dirname, + }, + }, + plugins: { + "@typescript-eslint": typescriptEslint, + "prettier": prettierEslint, + "no-only-tests": noOnlyTestsEslint, + "regexp": regexpEslint, + }, + rules: { + // These off/configured-differently-by-default rules fit well for us + '@typescript-eslint/switch-exhaustiveness-check': 'error', + '@typescript-eslint/no-unused-vars': [ + 'warn', + { + argsIgnorePattern: '^_', + varsIgnorePattern: '^_', + caughtErrorsIgnorePattern: '^_', + ignoreRestSiblings: true, + }, + ], + 'no-only-tests/no-only-tests': 'error', + '@typescript-eslint/no-shadow': 'error', + 'no-console': 'warn', + + // Todo: do we want these? + '@typescript-eslint/array-type': 'off', + '@typescript-eslint/ban-ts-comment': 'off', + '@typescript-eslint/class-literal-property-style': 'off', + '@typescript-eslint/consistent-indexed-object-style': 'off', + '@typescript-eslint/consistent-type-definitions': 'off', + '@typescript-eslint/dot-notation': 'off', + '@typescript-eslint/no-base-to-string': 'off', + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/no-floating-promises': 'off', + '@typescript-eslint/no-misused-promises': 'off', + '@typescript-eslint/no-redundant-type-constituents': 'off', + '@typescript-eslint/no-this-alias': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/no-unnecessary-type-assertion': 'off', + '@typescript-eslint/prefer-nullish-coalescing': 'off', + '@typescript-eslint/prefer-optional-chain': 'off', + '@typescript-eslint/prefer-string-starts-ends-with': 'off', + '@typescript-eslint/require-await': 'off', + '@typescript-eslint/restrict-plus-operands': 'off', + '@typescript-eslint/restrict-template-expressions': 'off', + '@typescript-eslint/sort-type-constituents': 'off', + '@typescript-eslint/unbound-method': 'off', + '@typescript-eslint/no-explicit-any': 'off', + + // Enforce separate type imports for type-only imports to avoid bundling unneeded code + '@typescript-eslint/consistent-type-imports': [ + 'error', + { + prefer: 'type-imports', + fixStyle: 'separate-type-imports', + disallowTypeAnnotations: false, + }, + ], + + // These rules enabled by the preset configs don't work well for us + '@typescript-eslint/await-thenable': 'off', + 'prefer-const': 'off', + + // In some cases, using explicit letter-casing is more performant than the `i` flag + 'regexp/use-ignore-case': 'off', + }, + }, + + { + // Ensure Node builtins aren't included in Astro's server runtime + files: ['packages/astro/src/runtime/**/*.ts'], + rules: { + 'no-restricted-imports': [ + 'error', + { + paths: [...builtinModules], + patterns: ['node:*'], + }, + ], + }, + }, + { + files: ['packages/astro/src/runtime/client/**/*.ts'], + languageOptions: { + globals: { + browser: true, + } + }, + }, + { + files: ['packages/**/test/*.js', 'packages/**/*.js'], + languageOptions: { + globals: { + mocha: true, + globalThis: false, // false means read-only + } + }, + rules: { + 'no-console': 'off', + }, + }, + { + files: ['packages/integrations/**/*.ts'], + rules: { + 'no-console': ['error', {allow: ['warn', 'error', 'info', 'debug']}], + }, + }, + { + files: ['benchmark/**/*.js'], + rules: { + '@typescript-eslint/no-unused-vars': 'off', + 'no-console': 'off', + }, + }, + { + files: ['packages/db/**/cli/**/*.ts'], + rules: { + 'no-console': 'off', + }, + }, + { + files: ['packages/astro/src/core/errors/errors-data.ts'], + rules: { + // This file is used for docs generation, as such the code need to be in a certain format, we can somewhat ensure this with these rules + 'object-shorthand': ['error', 'methods', {avoidExplicitReturnArrows: true}], + 'arrow-body-style': ['error', 'never'], + }, + }, + + { + files: ['packages/db/src/runtime/**/*.ts'], + rules: { + 'no-restricted-imports': 'off', + '@typescript-eslint/no-restricted-imports': [ + 'error', + { + patterns: [ + { + group: ['../core/*'], + allowTypeImports: true, + }, + ], + }, + ], + }, + }, +] diff --git a/package.json b/package.json index 009cf5445426..2a2eadaa3fd8 100644 --- a/package.json +++ b/package.json @@ -52,15 +52,14 @@ "astro-benchmark": "workspace:*" }, "devDependencies": { - "@biomejs/biome": "1.5.3", "@astrojs/check": "^0.5.8", + "@biomejs/biome": "1.5.3", "@changesets/changelog-github": "^0.4.8", "@changesets/cli": "^2.26.2", + "@eslint/eslintrc": "^3.0.2", "@types/node": "^18.17.8", - "@typescript-eslint/eslint-plugin": "^6.11.0", - "@typescript-eslint/parser": "^6.11.0", "esbuild": "^0.19.6", - "eslint": "^8.54.0", + "eslint": "^9.0.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-no-only-tests": "^3.1.0", "eslint-plugin-prettier": "^5.0.0", @@ -72,7 +71,8 @@ "prettier-plugin-astro": "^0.12.2", "tiny-glob": "^0.2.9", "turbo": "^1.12.4", - "typescript": "~5.2.2" + "typescript": "~5.2.2", + "typescript-eslint": "^7.6.0" }, "pnpm": { "packageExtensions": { diff --git a/packages/astro/src/assets/utils/vendor/image-size/types/svg.ts b/packages/astro/src/assets/utils/vendor/image-size/types/svg.ts index 8d8304e32311..11baaf6d2a85 100644 --- a/packages/astro/src/assets/utils/vendor/image-size/types/svg.ts +++ b/packages/astro/src/assets/utils/vendor/image-size/types/svg.ts @@ -56,7 +56,6 @@ function parseAttributes(root: string): IAttributes { const viewbox = root.match(extractorRegExps.viewbox) return { height: height && (parseLength(height[2]) as number), - // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion viewbox: viewbox && (parseViewbox(viewbox[2]) as IAttributes), width: width && (parseLength(width[2]) as number), } diff --git a/packages/astro/src/core/build/generate.ts b/packages/astro/src/core/build/generate.ts index a2c476572ab9..381c9e6426c8 100644 --- a/packages/astro/src/core/build/generate.ts +++ b/packages/astro/src/core/build/generate.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import os from 'node:os'; import { fileURLToPath } from 'node:url'; -import { bgGreen, black, blue, bold, dim, green, magenta, red } from 'kleur/colors'; +import { bgGreen, black, blue, bold, dim, green, magenta } from 'kleur/colors'; import PQueue from 'p-queue'; import type { OutputAsset, OutputChunk } from 'rollup'; import type { diff --git a/packages/astro/src/runtime/server/render/component.ts b/packages/astro/src/runtime/server/render/component.ts index cff798e9024b..4473c7441f62 100644 --- a/packages/astro/src/runtime/server/render/component.ts +++ b/packages/astro/src/runtime/server/render/component.ts @@ -269,6 +269,7 @@ If you're still stuck, please open an issue on GitHub or join us at https://astr : metadata.hydrateArgs; if (!clientOnlyValues.has(rendererName)) { // warning if provide incorrect client:only directive but find the renderer by guess + // eslint-disable-next-line no-console console.warn( `The client:only directive for ${metadata.displayName} is not recognized. The renderer ${renderer.name} will be used. If you intended to use a different renderer, please provide a valid client:only directive.` ); diff --git a/packages/db/src/runtime/errors.ts b/packages/db/src/runtime/errors.ts index 51febbff47b4..297cbc232399 100644 --- a/packages/db/src/runtime/errors.ts +++ b/packages/db/src/runtime/errors.ts @@ -1,4 +1,4 @@ -import { bold, red } from 'kleur/colors'; +import { bold } from 'kleur/colors'; export const FOREIGN_KEY_DNE_ERROR = (tableName: string) => { return `Table ${bold( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 47a25b062215..76b1233f6f17 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,33 +30,30 @@ importers: '@changesets/cli': specifier: ^2.26.2 version: 2.27.1 + '@eslint/eslintrc': + specifier: ^3.0.2 + version: 3.0.2 '@types/node': specifier: ^18.17.8 version: 18.19.30 - '@typescript-eslint/eslint-plugin': - specifier: ^6.11.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.2.2) - '@typescript-eslint/parser': - specifier: ^6.11.0 - version: 6.21.0(eslint@8.57.0)(typescript@5.2.2) esbuild: specifier: ^0.19.6 version: 0.19.12 eslint: - specifier: ^8.54.0 - version: 8.57.0 + specifier: ^9.0.0 + version: 9.0.0 eslint-config-prettier: specifier: ^9.0.0 - version: 9.1.0(eslint@8.57.0) + version: 9.1.0(eslint@9.0.0) eslint-plugin-no-only-tests: specifier: ^3.1.0 version: 3.1.0 eslint-plugin-prettier: specifier: ^5.0.0 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) + version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@9.0.0)(prettier@3.2.5) eslint-plugin-regexp: specifier: ^2.2.0 - version: 2.5.0(eslint@8.57.0) + version: 2.5.0(eslint@9.0.0) globby: specifier: ^14.0.0 version: 14.0.1 @@ -81,6 +78,9 @@ importers: typescript: specifier: ~5.2.2 version: 5.2.2 + typescript-eslint: + specifier: ^7.6.0 + version: 7.6.0(eslint@9.0.0)(typescript@5.2.2) benchmark: dependencies: @@ -7242,13 +7242,13 @@ packages: requiresBuild: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): + /@eslint-community/eslint-utils@4.4.0(eslint@9.0.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.0.0 eslint-visitor-keys: 3.4.3 dev: true @@ -7257,14 +7257,14 @@ packages: engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@eslint/eslintrc@3.0.2: + resolution: {integrity: sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) - espree: 9.6.1 - globals: 13.24.0 + espree: 10.0.1 + globals: 14.0.0 ignore: 5.3.1 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -7274,9 +7274,9 @@ packages: - supports-color dev: true - /@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.0.0: + resolution: {integrity: sha512-RThY/MnKrhubF6+s1JflwUjPEsnCEmYCWwqa/aRISKWNXGZ9epUwft4bUMM35SdKF9xvBrLydAM1RDHd1Z//ZQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dev: true /@fontsource/monofett@5.0.17: @@ -7287,8 +7287,8 @@ packages: resolution: {integrity: sha512-ZJbsCIJp6VHL1wYQUPpyBjXMzwGdfFedrmrw4r5sFi7WrMpnfJv+el1uVO6yDPIqnVqkPvjJ+xeKgJwnj2LuQQ==} dev: false - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + /@humanwhocodes/config-array@0.12.3: + resolution: {integrity: sha512-jsNnTBlMWuTpDkeE3on7+dWJi0D6fdDfeANj/w7MpS8ztROCoLvIO2nG0CcFj+E4k8j4QrSTh4Oryi3i2G669g==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.3 @@ -8614,25 +8614,25 @@ packages: resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} dev: true - /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.2.2): - resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0)(eslint@9.0.0)(typescript@5.2.2): + resolution: {integrity: sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.2.2) - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/parser': 7.6.0(eslint@9.0.0)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 7.6.0 + '@typescript-eslint/type-utils': 7.6.0(eslint@9.0.0)(typescript@5.2.2) + '@typescript-eslint/utils': 7.6.0(eslint@9.0.0)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 7.6.0 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.57.0 + eslint: 9.0.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 @@ -8643,75 +8643,75 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.2.2): - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/parser@7.6.0(eslint@9.0.0)(typescript@5.2.2): + resolution: {integrity: sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/scope-manager': 7.6.0 + '@typescript-eslint/types': 7.6.0 + '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 7.6.0 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.57.0 + eslint: 9.0.0 typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@6.21.0: - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/scope-manager@7.6.0: + resolution: {integrity: sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==} + engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/types': 7.6.0 + '@typescript-eslint/visitor-keys': 7.6.0 dev: true - /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.2.2): - resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/type-utils@7.6.0(eslint@9.0.0)(typescript@5.2.2): + resolution: {integrity: sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.2.2) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.2.2) + '@typescript-eslint/utils': 7.6.0(eslint@9.0.0)(typescript@5.2.2) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.57.0 + eslint: 9.0.0 ts-api-utils: 1.3.0(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@6.21.0: - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/types@7.6.0: + resolution: {integrity: sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==} + engines: {node: ^18.18.0 || >=20.0.0} dev: true - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.2.2): - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/typescript-estree@7.6.0(typescript@5.2.2): + resolution: {integrity: sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/types': 7.6.0 + '@typescript-eslint/visitor-keys': 7.6.0 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 - minimatch: 9.0.3 + minimatch: 9.0.4 semver: 7.6.0 ts-api-utils: 1.3.0(typescript@5.2.2) typescript: 5.2.2 @@ -8719,30 +8719,30 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.2.2): - resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/utils@7.6.0(eslint@9.0.0)(typescript@5.2.2): + resolution: {integrity: sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.56.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.2.2) - eslint: 8.57.0 + '@typescript-eslint/scope-manager': 7.6.0 + '@typescript-eslint/types': 7.6.0 + '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.2.2) + eslint: 9.0.0 semver: 7.6.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@6.21.0: - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/visitor-keys@7.6.0: + resolution: {integrity: sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==} + engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/types': 7.6.0 eslint-visitor-keys: 3.4.3 dev: true @@ -10512,13 +10512,6 @@ packages: /dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true - /dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} dependencies: @@ -10910,13 +10903,13 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - /eslint-config-prettier@9.1.0(eslint@8.57.0): + /eslint-config-prettier@9.1.0(eslint@9.0.0): resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.57.0 + eslint: 9.0.0 dev: true /eslint-plugin-no-only-tests@3.1.0: @@ -10924,7 +10917,7 @@ packages: engines: {node: '>=5.0.0'} dev: true - /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5): + /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@9.0.0)(prettier@3.2.5): resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -10938,32 +10931,32 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 8.57.0 - eslint-config-prettier: 9.1.0(eslint@8.57.0) + eslint: 9.0.0 + eslint-config-prettier: 9.1.0(eslint@9.0.0) prettier: 3.2.5 prettier-linter-helpers: 1.0.0 synckit: 0.8.8 dev: true - /eslint-plugin-regexp@2.5.0(eslint@8.57.0): + /eslint-plugin-regexp@2.5.0(eslint@9.0.0): resolution: {integrity: sha512-I7vKcP0o75WS5SHiVNXN+Eshq49sbrweMQIuqSL3AId9AwDe9Dhbfug65vw64LxmOd4v+yf5l5Xt41y9puiq0g==} engines: {node: ^18 || >=20} peerDependencies: eslint: '>=8.44.0' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) '@eslint-community/regexpp': 4.10.0 comment-parser: 1.4.1 - eslint: 8.57.0 + eslint: 9.0.0 jsdoc-type-pratt-parser: 4.0.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 dev: true - /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 @@ -10974,41 +10967,42 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /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: true + + /eslint@9.0.0: + resolution: {integrity: sha512-IMryZ5SudxzQvuod6rUdIUz29qFItWx281VhtFVc2Psy/ZhlCeD/5DT6lBIJ4H3G+iamGJoTln1v+QSuPw0p7Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint/eslintrc': 3.0.2 + '@eslint/js': 9.0.0 + '@humanwhocodes/config-array': 0.12.3 '@humanwhocodes/module-importer': 1.0.1 '@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(supports-color@8.1.1) - doctrine: 3.0.0 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.1 + eslint-visitor-keys: 4.0.0 + espree: 10.0.1 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 @@ -11026,13 +11020,13 @@ packages: engines: {node: '>=6'} dev: true - /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.0.1: + resolution: {integrity: sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==} + 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 + eslint-visitor-keys: 4.0.0 dev: true /esprima@4.0.1: @@ -11252,11 +11246,11 @@ packages: web-streams-polyfill: 3.3.3 dev: false - /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 dev: true /file-uri-to-path@1.0.0: @@ -11304,13 +11298,12 @@ packages: micromatch: 4.0.5 pkg-dir: 4.2.0 - /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 dev: true /flat@5.0.2: @@ -11578,11 +11571,9 @@ packages: engines: {node: '>=4'} dev: false - /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: true /globalthis@1.0.3: @@ -13544,13 +13535,6 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - brace-expansion: 2.0.1 - dev: true - /minimatch@9.0.4: resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} @@ -16508,11 +16492,6 @@ packages: engines: {node: '>=10'} dev: true - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true - /type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} @@ -16598,6 +16577,25 @@ packages: dependencies: semver: 7.6.0 + /typescript-eslint@7.6.0(eslint@9.0.0)(typescript@5.2.2): + resolution: {integrity: sha512-LY6vH6F1l5jpGqRtU+uK4+mOecIb4Cd4kaz1hAiJrgnNiHUA8wiw8BkJyYS+MRLM69F1QuSKwtGlQqnGl1Rc6w==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@9.0.0)(typescript@5.2.2) + '@typescript-eslint/parser': 7.6.0(eslint@9.0.0)(typescript@5.2.2) + '@typescript-eslint/utils': 7.6.0(eslint@9.0.0)(typescript@5.2.2) + eslint: 9.0.0 + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + /typescript@5.2.2: resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} engines: {node: '>=14.17'}