diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 7c99985c79..0000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - // We want to enable this in the long run. For now there are a lot of errors that needs to be handled. - // "plugin:@typescript-eslint/recommended-requiring-type-checking", - "plugin:import/typescript", - "prettier" - ], - "parserOptions": { - "ecmaVersion": 6, - "sourceType": "module", - "project": true - }, - "plugins": [ - "@typescript-eslint", - "unused-imports", - "import", - "unicorn", - "mocha" - ], - "rules": { - "import/no-relative-packages": "error", - "@typescript-eslint/consistent-type-imports": "error", - "@typescript-eslint/consistent-type-assertions": [ - "error", - { - "assertionStyle": "as" - } - ], - "@typescript-eslint/naming-convention": [ - "error", - { - "selector": ["objectLiteralProperty"], - "format": ["camelCase"], - "filter": { - "regex": "[.]", - "match": false - } - } - ], - "@typescript-eslint/no-floating-promises": "error", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-inferrable-types": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "unused-imports/no-unused-imports": "error", - "@typescript-eslint/no-unused-vars": [ - "error", - { - "argsIgnorePattern": "^_", - "varsIgnorePattern": "^_", - "caughtErrorsIgnorePattern": "^_", - "ignoreRestSiblings": true - } - ], - "curly": "error", - "eqeqeq": [ - "error", - "always", - { - "null": "never" - } - ], - "no-constant-condition": [ - "error", - { - "checkLoops": false - } - ], - "no-restricted-syntax": [ - "error", - "MemberExpression[object.property.name='constructor'][property.name='name']" - ], - "no-throw-literal": "error", - "semi": "off", - "unicorn/prefer-module": "error", - "mocha/no-skipped-tests": "error", - "mocha/no-exclusive-tests": "error" - }, - "overrides": [ - { - "files": ["*.tsx"], - "rules": { - "@typescript-eslint/naming-convention": [ - "error", - { - "selector": ["function"], - "format": ["PascalCase", "camelCase"] - } - ] - } - }, - { - "files": [ - "jest.config.ts", - "docusaurus.config.mts", - "mdx-components.tsx", - "typings/**" - ], - "extends": ["plugin:@typescript-eslint/disable-type-checked"] - } - ], - "settings": { - "import/resolver": { - "typescript": { - "alwaysTryTypes": true, // always try to resolve types under `@types` directory even it doesn't contain any source code, like `@types/unist` - "project": ["tsconfig.json", "packages/*/tsconfig.json"] - } - } - }, - "ignorePatterns": [ - "**/generated/**", - "**/out/**", - "**/vendor/**/*.js", - "**/vendor/**/*.ts", - "/data/playground/**" - ] -} diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index e2f88b53a7..baf87d9a01 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -17,7 +17,6 @@ jobs: runs-on: ubuntu-latest env: CURSORLESS_REPO_ROOT: ${{ github.workspace }} - ESLINT_USE_FLAT_CONFIG: false steps: - name: Checkout repository diff --git a/eslint.config.mts b/eslint.config.mts new file mode 100644 index 0000000000..7364ad0a92 --- /dev/null +++ b/eslint.config.mts @@ -0,0 +1,154 @@ +import eslintJs from "@eslint/js"; +import prettierConfig from "eslint-config-prettier/flat"; +import importPlugin from "eslint-plugin-import"; +import mochaPlugin from "eslint-plugin-mocha"; +import unicornPlugin from "eslint-plugin-unicorn"; +import unusedImportsPlugin from "eslint-plugin-unused-imports"; +import eslintTs, { type ConfigWithExtends } from "typescript-eslint"; +import { commonConfig } from "./packages/common/eslint.config.mts"; +import { cursorlessEngineConfig } from "./packages/cursorless-engine/eslint.config.mts"; +import { cursorlessOrgConfig } from "./packages/cursorless-org/eslint.config.mts"; +import { cursorlessVscodeConfig } from "./packages/cursorless-vscode/eslint.config.mts"; + +const ignoresConfig: ConfigWithExtends = { + ignores: [ + "**/generated/**/*", + "**/out/**/*", + "**/dist/**/*", + "**/build/**/*", + "**/vendor/**/*", + "**/.next/**/*", + "**/.docusaurus/**/*", + "**/eslint.config.mts", + "data/playground/**/*", + ], +}; + +const rootConfig: ConfigWithExtends = { + plugins: { + "unused-imports": unusedImportsPlugin, + import: importPlugin, + unicorn: unicornPlugin, + mocha: mochaPlugin, + }, + + languageOptions: { + parser: eslintTs.parser, + ecmaVersion: 6, + sourceType: "module", + parserOptions: { + project: true, + }, + }, + + settings: { + "import/resolver": { + typescript: { + // Always try to resolve types under `@types` directory even it doesn't contain any source code, like `@types/unist` + alwaysTryTypes: true, + project: ["tsconfig.json", "packages/*/tsconfig.json"], + }, + }, + }, + + rules: { + "import/no-relative-packages": "error", + "@typescript-eslint/consistent-type-imports": "error", + "@typescript-eslint/consistent-type-assertions": [ + "error", + { + assertionStyle: "as", + }, + ], + "@typescript-eslint/naming-convention": [ + "error", + { + selector: ["objectLiteralProperty"], + format: ["camelCase"], + filter: { + regex: "[.]", + match: false, + }, + }, + ], + "@typescript-eslint/no-floating-promises": "error", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-inferrable-types": "off", + "@typescript-eslint/no-non-null-assertion": "off", + "unused-imports/no-unused-imports": "error", + "@typescript-eslint/no-unused-vars": [ + "error", + { + argsIgnorePattern: "^_", + varsIgnorePattern: "^_", + caughtErrorsIgnorePattern: "^_", + ignoreRestSiblings: true, + }, + ], + curly: "error", + eqeqeq: [ + "error", + "always", + { + null: "never", + }, + ], + "no-constant-condition": [ + "error", + { + checkLoops: false, + }, + ], + "no-restricted-syntax": [ + "error", + "MemberExpression[object.property.name='constructor'][property.name='name']", + ], + "no-throw-literal": "error", + semi: "off", + "unicorn/prefer-module": "error", + "mocha/no-pending-tests": "error", + "mocha/no-exclusive-tests": "error", + }, +}; + +const tsxConfig: ConfigWithExtends = { + files: ["**/*.tsx"], + rules: { + "@typescript-eslint/naming-convention": [ + "error", + { + selector: ["function"], + format: ["PascalCase", "camelCase"], + }, + ], + }, +}; + +const disabledTypeCheckConfig: ConfigWithExtends = { + files: [ + "**/jest.config.ts", + "**/docusaurus.config.mts", + "**/mdx-components.tsx", + "typings/**", + "**/*.js", + "**/*.mjs", + ], + + extends: [eslintTs.configs.disableTypeChecked], +}; + +export default eslintTs.config( + ignoresConfig, + eslintJs.configs.recommended, + // We want to enable this in the long run. For now there are a lot of errors that needs to be handled. + // eslintTs.configs.recommendedTypeChecked, + eslintTs.configs.recommended, + prettierConfig, + rootConfig, + tsxConfig, + disabledTypeCheckConfig, + commonConfig, + cursorlessEngineConfig, + cursorlessVscodeConfig, + cursorlessOrgConfig, +); diff --git a/package.json b/package.json index 05d532e654..e48569995d 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "fix:syncpack": "pnpm syncpack fix-mismatches", "init-vscode-sandbox": "pnpm --filter=@cursorless/cursorless-vscode init-launch-sandbox", "lint:meta": "pnpm run meta-updater:base --test", - "lint:ts": "cross-env ESLINT_USE_FLAT_CONFIG=false eslint packages --ext ts,tsx,mts", + "lint:ts": "eslint packages --ext ts,tsx,mts", "lint": "pnpm run lint:meta && syncpack list-mismatches && pnpm run lint:ts", "meta-updater:base": "pnpm --filter=@cursorless/meta-updater build && meta-updater", "preinstall": "npx only-allow pnpm", @@ -31,23 +31,23 @@ "watch:tsc": "tsc --build --watch" }, "devDependencies": { + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "^9.31.0", "@pnpm/meta-updater": "^2.0.6", "@types/node": "^24.0.15", - "@typescript-eslint/eslint-plugin": "^8.38.0", - "@typescript-eslint/parser": "^8.38.0", - "cross-env": "^7.0.3", "esbuild": "^0.25.8", "eslint": "^9.31.0", "eslint-config-prettier": "^10.1.8", "eslint-import-resolver-typescript": "^4.4.4", "eslint-plugin-import": "^2.32.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-unicorn": "^56.0.1", + "eslint-plugin-mocha": "^11.1.0", + "eslint-plugin-unicorn": "^60.0.0", "eslint-plugin-unused-imports": "^4.1.4", "prettier": "~3.3.3", "prettier-plugin-tailwindcss": "^0.6.14", "syncpack": "^13.0.4", - "typescript": "^5.8.3" + "typescript": "^5.8.3", + "typescript-eslint": "^8.38.0" }, "pnpm": { "patchedDependencies": { diff --git a/packages/cheatsheet-local/src/webpack.config.ts b/packages/cheatsheet-local/src/webpack.config.ts index b249d74abe..18dc8c6812 100644 --- a/packages/cheatsheet-local/src/webpack.config.ts +++ b/packages/cheatsheet-local/src/webpack.config.ts @@ -1,5 +1,4 @@ // Generated using webpack-cli https://github.com/webpack/webpack-cli -/*eslint-env node*/ import { cheatsheetBodyClasses, diff --git a/packages/common/.eslintrc.json b/packages/common/.eslintrc.json deleted file mode 100644 index bacf74be39..0000000000 --- a/packages/common/.eslintrc.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "overrides": [ - { - "files": ["*.ts"], - "excludedFiles": ["*.test.ts"], - "rules": { - "import/no-nodejs-modules": "error" - } - } - ] -} diff --git a/packages/common/eslint.config.mts b/packages/common/eslint.config.mts new file mode 100644 index 0000000000..e239477ac1 --- /dev/null +++ b/packages/common/eslint.config.mts @@ -0,0 +1,37 @@ +import type { ConfigArray } from "typescript-eslint"; + +export const commonConfig: ConfigArray = [ + { + files: ["packages/common/**/*.ts"], + + ignores: ["**/*.test.ts"], + + rules: { + "import/no-nodejs-modules": "error", + }, + }, + + { + files: ["packages/common/src/types/command/**/*.ts"], + + rules: { + "@typescript-eslint/no-restricted-imports": [ + "error", + { + patterns: [ + { + group: ["@cursorless/*", "../*"], + message: "API types shouldn't have any dependencies", + }, + ], + paths: [ + { + name: "@*", + message: "API types shouldn't have any dependencies", + }, + ], + }, + ], + }, + }, +]; diff --git a/packages/common/scripts/my-ts-node.js b/packages/common/scripts/my-ts-node.js index bcd8668111..053bd1d4db 100755 --- a/packages/common/scripts/my-ts-node.js +++ b/packages/common/scripts/my-ts-node.js @@ -1,8 +1,10 @@ #!/usr/bin/env node // @ts-check -/*eslint-env node*/ +/* global process, console */ + // This script runs a TypeScript file using Node.js by first bundling it with // esbuild. + import { spawn } from "cross-spawn"; import { build } from "esbuild"; import { existsSync, mkdirSync, rmdirSync } from "node:fs"; diff --git a/packages/common/src/types/command/.eslintrc.json b/packages/common/src/types/command/.eslintrc.json deleted file mode 100644 index d32e88d54f..0000000000 --- a/packages/common/src/types/command/.eslintrc.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "rules": { - "@typescript-eslint/no-restricted-imports": [ - "error", - { - "patterns": [ - { - "group": ["@cursorless/*", "../*"], - "message": "API types shouldn't have any dependencies" - } - ], - "paths": [ - { - "name": "@*", - "message": "API types shouldn't have any dependencies" - } - ] - } - ] - } -} diff --git a/packages/cursorless-engine/.eslintrc.json b/packages/cursorless-engine/.eslintrc.json deleted file mode 100644 index bb77fab005..0000000000 --- a/packages/cursorless-engine/.eslintrc.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "overrides": [ - { - "files": ["*.ts"], - "excludedFiles": ["src/scripts/**", "src/testUtil/**", "*.test.ts"], - "rules": { - "import/no-nodejs-modules": "error" - } - } - ] -} diff --git a/packages/cursorless-engine/eslint.config.mts b/packages/cursorless-engine/eslint.config.mts new file mode 100644 index 0000000000..217f1fc7ce --- /dev/null +++ b/packages/cursorless-engine/eslint.config.mts @@ -0,0 +1,11 @@ +import type { ConfigWithExtends } from "typescript-eslint"; + +export const cursorlessEngineConfig: ConfigWithExtends = { + files: ["packages/cursorless-engine/**/*.ts"], + + ignores: ["**/src/scripts/**", "**/src/testUtil/**", "**/*test.ts"], + + rules: { + "import/no-nodejs-modules": "error", + }, +}; diff --git a/packages/cursorless-engine/src/processTargets/.eslintrc.json b/packages/cursorless-engine/src/processTargets/.eslintrc.json deleted file mode 100644 index e160f358ed..0000000000 --- a/packages/cursorless-engine/src/processTargets/.eslintrc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "rules": { - "import/no-default-export": ["error"] - } -} diff --git a/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/BaseScopeHandler.ts b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/BaseScopeHandler.ts index 32daa91003..b6f51782ac 100644 --- a/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/BaseScopeHandler.ts +++ b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/BaseScopeHandler.ts @@ -1,4 +1,3 @@ -// eslint-disable-next-line @typescript-eslint/no-unused-vars, unused-imports/no-unused-imports import type { Direction, Position, diff --git a/packages/cursorless-engine/src/typings/target.types.ts b/packages/cursorless-engine/src/typings/target.types.ts index 6a62e682f7..5e6a29dd8a 100644 --- a/packages/cursorless-engine/src/typings/target.types.ts +++ b/packages/cursorless-engine/src/typings/target.types.ts @@ -5,7 +5,6 @@ // - https://github.com/microsoft/TypeScript/issues/43950 // eslint-disable-next-line @typescript-eslint/no-unused-vars, unused-imports/no-unused-imports import type { ModifyIfUntypedStage } from "../processTargets/modifiers/ConditionalModifierStages"; -// eslint-disable-next-line @typescript-eslint/no-unused-vars, unused-imports/no-unused-imports import type { GeneralizedRange, InsertionMode, diff --git a/packages/cursorless-org-docs/config/algolia/crawler-settings.js b/packages/cursorless-org-docs/config/algolia/crawler-settings.js index 43b5d3b435..57665fc127 100644 --- a/packages/cursorless-org-docs/config/algolia/crawler-settings.js +++ b/packages/cursorless-org-docs/config/algolia/crawler-settings.js @@ -1,3 +1,5 @@ +/* global Crawler */ + new Crawler({ rateLimit: 8, startUrls: ["https://www.cursorless.org/docs"], diff --git a/packages/cursorless-org-docs/src/plugins/scope-tests-plugin.ts b/packages/cursorless-org-docs/src/plugins/scope-tests-plugin.ts index e0b7240f15..3f4964d9cc 100644 --- a/packages/cursorless-org-docs/src/plugins/scope-tests-plugin.ts +++ b/packages/cursorless-org-docs/src/plugins/scope-tests-plugin.ts @@ -21,7 +21,6 @@ export default function prepareAssetsPlugin( name: "scope-tests-plugin", loadContent(): ScopeTests { - // eslint-disable-next-line unicorn/prefer-module const repoRoot = path.join(__dirname, "../../../.."); process.env.CURSORLESS_REPO_ROOT = repoRoot; return prepareAssets(); diff --git a/packages/cursorless-org-docs/tailwind.config.js b/packages/cursorless-org-docs/tailwind.config.js index ef134d74ec..da49ad1396 100644 --- a/packages/cursorless-org-docs/tailwind.config.js +++ b/packages/cursorless-org-docs/tailwind.config.js @@ -1,8 +1,9 @@ -import { fontFamily as _fontFamily } from "tailwindcss/defaultTheme"; - /** @type {import('tailwindcss').Config} */ + export const content = ["./src/**/*.{js,ts,jsx,tsx}"]; + export const corePlugins = { preflight: false, }; + export const plugins = []; diff --git a/packages/cursorless-org/.eslintrc.json b/packages/cursorless-org/.eslintrc.json deleted file mode 100644 index 6813270f2e..0000000000 --- a/packages/cursorless-org/.eslintrc.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "next/core-web-vitals", - "settings": { - "next": { - "rootDir": "packages/cursorless-org" - } - } -} diff --git a/packages/cursorless-org/eslint.config.mts b/packages/cursorless-org/eslint.config.mts new file mode 100644 index 0000000000..1f1210d9fb --- /dev/null +++ b/packages/cursorless-org/eslint.config.mts @@ -0,0 +1,18 @@ +import { FlatCompat } from "@eslint/eslintrc"; +import type { ConfigWithExtends } from "typescript-eslint"; + +const compat = new FlatCompat({ + baseDirectory: import.meta.dirname, +}); + +export const cursorlessOrgConfig: ConfigWithExtends = { + files: ["packages/cursorless-org/**/*"], + + extends: [compat.extends("next/core-web-vitals")], + + settings: { + next: { + rootDir: "packages/cursorless-org", + }, + }, +}; diff --git a/packages/cursorless-org/tailwind.config.js b/packages/cursorless-org/tailwind.config.js index 26d3cbe7dc..10f42e334e 100644 --- a/packages/cursorless-org/tailwind.config.js +++ b/packages/cursorless-org/tailwind.config.js @@ -44,6 +44,7 @@ const { } = getScalingStrings(5, 5); const references = JSON.parse( + // eslint-disable-next-line unicorn/prefer-module readFileSync(join(__dirname, "tsconfig.json"), "utf-8"), ).references.map((ref) => ref.path); diff --git a/packages/cursorless-vscode-e2e/src/suite/crossCellsSetSelection.vscode.test.ts b/packages/cursorless-vscode-e2e/src/suite/crossCellsSetSelection.vscode.test.ts index 50349a8b6f..b6098bedf1 100644 --- a/packages/cursorless-vscode-e2e/src/suite/crossCellsSetSelection.vscode.test.ts +++ b/packages/cursorless-vscode-e2e/src/suite/crossCellsSetSelection.vscode.test.ts @@ -43,7 +43,6 @@ async function runTest() { ], }); - // eslint-disable-next-line no-restricted-properties const editor = window.activeTextEditor; if (editor == null) { diff --git a/packages/cursorless-vscode-e2e/src/suite/editNewCell.vscode.test.ts b/packages/cursorless-vscode-e2e/src/suite/editNewCell.vscode.test.ts index 156af3d0f2..54d1db02c2 100644 --- a/packages/cursorless-vscode-e2e/src/suite/editNewCell.vscode.test.ts +++ b/packages/cursorless-vscode-e2e/src/suite/editNewCell.vscode.test.ts @@ -52,7 +52,6 @@ async function runTest( const activeCelIndex = getCellIndex( notebook, - // eslint-disable-next-line no-restricted-properties window.activeTextEditor!.document, ); diff --git a/packages/cursorless-vscode-e2e/src/suite/followLink.vscode.test.ts b/packages/cursorless-vscode-e2e/src/suite/followLink.vscode.test.ts index eb094df21d..e2fd270353 100644 --- a/packages/cursorless-vscode-e2e/src/suite/followLink.vscode.test.ts +++ b/packages/cursorless-vscode-e2e/src/suite/followLink.vscode.test.ts @@ -61,7 +61,6 @@ async function followLink() { ], }); - // eslint-disable-next-line no-restricted-properties const editor = vscode.window.activeTextEditor; assert.equal(editor?.document?.uri?.scheme, "file"); assert.equal(editor?.document.getText().trimEnd(), "hello world"); diff --git a/packages/cursorless-vscode/eslint.config.mts b/packages/cursorless-vscode/eslint.config.mts new file mode 100644 index 0000000000..a9253dd0f7 --- /dev/null +++ b/packages/cursorless-vscode/eslint.config.mts @@ -0,0 +1,19 @@ +import type { ConfigWithExtends } from "typescript-eslint"; + +export const cursorlessVscodeConfig: ConfigWithExtends = { + files: ["packages/cursorless-vscode/src/scripts/**/*.ts"], + + rules: { + "no-restricted-imports": [ + "error", + { + paths: [ + { + name: "vscode", + message: "Scripts shouldn't depend on vscode", + }, + ], + }, + ], + }, +}; diff --git a/packages/cursorless-vscode/resources/font_measurements.js b/packages/cursorless-vscode/resources/font_measurements.js index 7c040118a8..a3576e63b9 100644 --- a/packages/cursorless-vscode/resources/font_measurements.js +++ b/packages/cursorless-vscode/resources/font_measurements.js @@ -1,3 +1,5 @@ +/* global document, acquireVsCodeApi */ + const letter = document.querySelector("#letter"); const container = document.querySelector("#container"); const baselineHeight = diff --git a/packages/cursorless-vscode/resources/installationDependencies.js b/packages/cursorless-vscode/resources/installationDependencies.js index 92c9885f0b..6784fd0446 100644 --- a/packages/cursorless-vscode/resources/installationDependencies.js +++ b/packages/cursorless-vscode/resources/installationDependencies.js @@ -1,3 +1,5 @@ +/* global window, document, acquireVsCodeApi */ + const vscode = acquireVsCodeApi(); const msgTalon = document.getElementById("msg-talon"); const msgCursorlessTalon = document.getElementById("msg-cursorless-talon"); diff --git a/packages/cursorless-vscode/src/scripts/.eslintrc.json b/packages/cursorless-vscode/src/scripts/.eslintrc.json deleted file mode 100644 index 34b602ab3b..0000000000 --- a/packages/cursorless-vscode/src/scripts/.eslintrc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "rules": { - "no-restricted-imports": [ - "error", - { - "paths": [ - { - "name": "vscode", - "message": "Scripts shouldn't depend on vscode" - } - ] - } - ] - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 71edd2fded..141721f5f3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,21 +20,18 @@ importers: .: devDependencies: + '@eslint/eslintrc': + specifier: ^3.3.1 + version: 3.3.1 + '@eslint/js': + specifier: ^9.31.0 + version: 9.31.0 '@pnpm/meta-updater': specifier: ^2.0.6 version: 2.0.6(@types/node@24.0.15)(typanion@3.14.0) '@types/node': specifier: ^24.0.15 version: 24.0.15 - '@typescript-eslint/eslint-plugin': - specifier: ^8.38.0 - version: 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': - specifier: ^8.38.0 - version: 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - cross-env: - specifier: ^7.0.3 - version: 7.0.3 esbuild: specifier: ^0.25.8 version: 0.25.8 @@ -51,11 +48,11 @@ importers: specifier: ^2.32.0 version: 2.32.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.31.0(jiti@2.4.2)) eslint-plugin-mocha: - specifier: ^10.5.0 - version: 10.5.0(eslint@9.31.0(jiti@2.4.2)) + specifier: ^11.1.0 + version: 11.1.0(eslint@9.31.0(jiti@2.4.2)) eslint-plugin-unicorn: - specifier: ^56.0.1 - version: 56.0.1(eslint@9.31.0(jiti@2.4.2)) + specifier: ^60.0.0 + version: 60.0.0(eslint@9.31.0(jiti@2.4.2)) eslint-plugin-unused-imports: specifier: ^4.1.4 version: 4.1.4(@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2)) @@ -71,6 +68,9 @@ importers: typescript: specifier: ^5.8.3 version: 5.8.3 + typescript-eslint: + specifier: ^8.38.0 + version: 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) packages/cheatsheet: dependencies: @@ -4688,9 +4688,9 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} + builtin-modules@5.0.0: + resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==} + engines: {node: '>=18.20'} builtins@5.1.0: resolution: {integrity: sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==} @@ -4807,6 +4807,9 @@ packages: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + change-case@5.4.4: + resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} + char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -5127,11 +5130,6 @@ packages: create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - cross-env@7.0.3: - resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} - engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} - hasBin: true - cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -5812,11 +5810,10 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - eslint-plugin-mocha@10.5.0: - resolution: {integrity: sha512-F2ALmQVPT1GoP27O1JTZGrV9Pqg8k79OeIuvw63UxMtQKREZtmkK1NFgkZQ2TW7L2JSSFKHFPTtHu5z8R9QNRw==} - engines: {node: '>=14.0.0'} + eslint-plugin-mocha@11.1.0: + resolution: {integrity: sha512-rKntVWRsQFPbf8OkSgVNRVRrcVAPaGTyEgWCEyXaPDJkTl0v5/lwu1vTk5sWiUJU8l2sxwvGUZzSNrEKdVMeQw==} peerDependencies: - eslint: '>=7.0.0' + eslint: '>=9.0.0' eslint-plugin-react-hooks@5.2.0: resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} @@ -5830,11 +5827,11 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - eslint-plugin-unicorn@56.0.1: - resolution: {integrity: sha512-FwVV0Uwf8XPfVnKSGpMg7NtlZh0G0gBarCaFcMUOoqPxXryxdYxTRRv4kH6B9TFCVIrjRXG+emcxIk2ayZilog==} - engines: {node: '>=18.18'} + eslint-plugin-unicorn@60.0.0: + resolution: {integrity: sha512-QUzTefvP8stfSXsqKQ+vBQSEsXIlAiCduS/V1Em+FKgL9c21U/IIm20/e3MFy1jyCf14tHAhqC1sX8OTy6VUCg==} + engines: {node: ^20.10.0 || >=21.0.0} peerDependencies: - eslint: '>=8.56.0' + eslint: '>=9.29.0' eslint-plugin-unused-imports@4.1.4: resolution: {integrity: sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==} @@ -5853,16 +5850,6 @@ packages: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint-utils@3.0.0: - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - - eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -6090,6 +6077,10 @@ packages: resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} engines: {node: '>=14.16'} + find-up-simple@1.0.1: + resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} + engines: {node: '>=18'} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -6262,10 +6253,6 @@ packages: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} engines: {node: '>=10'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -6274,6 +6261,10 @@ packages: resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} + globals@16.3.0: + resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==} + engines: {node: '>=18'} + globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -6403,9 +6394,6 @@ packages: hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - hosted-git-info@4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} @@ -6695,9 +6683,9 @@ packages: is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} + is-builtin-module@5.0.0: + resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==} + engines: {node: '>=18.20'} is-bun-module@2.0.0: resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} @@ -7170,10 +7158,6 @@ packages: canvas: optional: true - jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} @@ -7989,9 +7973,6 @@ packages: engines: {node: ^18.17.0 || >=20.5.0} hasBin: true - normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - normalize-package-data@3.0.3: resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} engines: {node: '>=10'} @@ -9030,9 +9011,6 @@ packages: railroad-diagrams@1.0.0: resolution: {integrity: sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==} - rambda@7.5.0: - resolution: {integrity: sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==} - randexp@0.4.6: resolution: {integrity: sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==} engines: {node: '>=0.12'} @@ -9140,18 +9118,10 @@ packages: resolution: {integrity: sha512-zz4qv/sKETv7nAkATqSJ9YMbKD8NXRPuA8d17VdYCuNYrVstB1S6UAMU6aytf5vRa9MESbZN7jLZdcmrOxz4gg==} engines: {node: '>=14.6'} - read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - read-pkg-up@9.1.0: resolution: {integrity: sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - read-pkg@7.1.0: resolution: {integrity: sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==} engines: {node: '>=12.20'} @@ -9242,10 +9212,6 @@ packages: regjsgen@0.8.0: resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} - regjsparser@0.10.0: - resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} - hasBin: true - regjsparser@0.12.0: resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} hasBin: true @@ -9487,10 +9453,6 @@ packages: semver-utils@1.1.4: resolution: {integrity: sha512-EjnoLE5OGmDAVV/8YDoN5KiajNadjzIp9BAHOhYeQHt7j0UWxjmgsx4YD48wp4Ue1Qogq38F1GNUJNqF1kKKxA==} - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -9868,10 +9830,6 @@ packages: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - strip-indent@4.0.0: resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} engines: {node: '>=12'} @@ -10226,10 +10184,6 @@ packages: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} - type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - type-fest@1.4.0: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} @@ -10269,6 +10223,13 @@ packages: typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + typescript-eslint@8.38.0: + resolution: {integrity: sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + typescript@5.8.3: resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} @@ -15876,7 +15837,7 @@ snapshots: buffer-from@1.1.2: {} - builtin-modules@3.3.0: {} + builtin-modules@5.0.0: {} builtins@5.1.0: dependencies: @@ -16011,6 +15972,8 @@ snapshots: chalk@5.4.1: {} + change-case@5.4.4: {} + char-regex@1.0.2: {} character-entities-html4@2.1.0: {} @@ -16300,10 +16263,6 @@ snapshots: create-require@1.1.1: {} - cross-env@7.0.3: - dependencies: - cross-spawn: 7.0.6 - cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -17085,12 +17044,11 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-mocha@10.5.0(eslint@9.31.0(jiti@2.4.2)): + eslint-plugin-mocha@11.1.0(eslint@9.31.0(jiti@2.4.2)): dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) eslint: 9.31.0(jiti@2.4.2) - eslint-utils: 3.0.0(eslint@9.31.0(jiti@2.4.2)) - globals: 13.24.0 - rambda: 7.5.0 + globals: 15.15.0 eslint-plugin-react-hooks@5.2.0(eslint@9.31.0(jiti@2.4.2)): dependencies: @@ -17118,25 +17076,27 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-unicorn@56.0.1(eslint@9.31.0(jiti@2.4.2)): + eslint-plugin-unicorn@60.0.0(eslint@9.31.0(jiti@2.4.2)): dependencies: '@babel/helper-validator-identifier': 7.27.1 '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) + '@eslint/plugin-kit': 0.3.4 + change-case: 5.4.4 ci-info: 4.3.0 clean-regexp: 1.0.0 core-js-compat: 3.44.0 eslint: 9.31.0(jiti@2.4.2) esquery: 1.6.0 - globals: 15.15.0 - indent-string: 4.0.0 - is-builtin-module: 3.2.1 + find-up-simple: 1.0.1 + globals: 16.3.0 + indent-string: 5.0.0 + is-builtin-module: 5.0.0 jsesc: 3.1.0 pluralize: 8.0.0 - read-pkg-up: 7.0.1 regexp-tree: 0.1.27 - regjsparser: 0.10.0 + regjsparser: 0.12.0 semver: 7.7.2 - strip-indent: 3.0.0 + strip-indent: 4.0.0 eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2)): dependencies: @@ -17154,13 +17114,6 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-utils@3.0.0(eslint@9.31.0(jiti@2.4.2)): - dependencies: - eslint: 9.31.0(jiti@2.4.2) - eslint-visitor-keys: 2.1.0 - - eslint-visitor-keys@2.1.0: {} - eslint-visitor-keys@3.4.3: {} eslint-visitor-keys@4.2.1: {} @@ -17457,6 +17410,8 @@ snapshots: common-path-prefix: 3.0.0 pkg-dir: 7.0.0 + find-up-simple@1.0.1: {} + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -17635,14 +17590,12 @@ snapshots: dependencies: ini: 2.0.0 - globals@13.24.0: - dependencies: - type-fest: 0.20.2 - globals@14.0.0: {} globals@15.15.0: {} + globals@16.3.0: {} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -17875,8 +17828,6 @@ snapshots: dependencies: react-is: 16.13.1 - hosted-git-info@2.8.9: {} - hosted-git-info@4.1.0: dependencies: lru-cache: 6.0.0 @@ -18195,9 +18146,9 @@ snapshots: is-buffer@1.1.6: {} - is-builtin-module@3.2.1: + is-builtin-module@5.0.0: dependencies: - builtin-modules: 3.3.0 + builtin-modules: 5.0.0 is-bun-module@2.0.0: dependencies: @@ -18843,8 +18794,6 @@ snapshots: - supports-color - utf-8-validate - jsesc@0.5.0: {} - jsesc@3.0.2: {} jsesc@3.1.0: {} @@ -19950,13 +19899,6 @@ snapshots: dependencies: abbrev: 3.0.1 - normalize-package-data@2.5.0: - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.10 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 - normalize-package-data@3.0.3: dependencies: hosted-git-info: 4.1.0 @@ -20962,8 +20904,6 @@ snapshots: railroad-diagrams@1.0.0: {} - rambda@7.5.0: {} - randexp@0.4.6: dependencies: discontinuous-range: 1.0.0 @@ -21101,25 +21041,12 @@ snapshots: ini: 3.0.1 strip-bom: 4.0.0 - read-pkg-up@7.0.1: - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - read-pkg-up@9.1.0: dependencies: find-up: 6.3.0 read-pkg: 7.1.0 type-fest: 2.19.0 - read-pkg@5.2.0: - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - read-pkg@7.1.0: dependencies: '@types/normalize-package-data': 2.4.4 @@ -21252,10 +21179,6 @@ snapshots: regjsgen@0.8.0: {} - regjsparser@0.10.0: - dependencies: - jsesc: 0.5.0 - regjsparser@0.12.0: dependencies: jsesc: 3.0.2 @@ -21538,8 +21461,6 @@ snapshots: semver-utils@1.1.4: {} - semver@5.7.2: {} - semver@6.3.1: {} semver@7.7.2: {} @@ -22033,10 +21954,6 @@ snapshots: strip-final-newline@2.0.0: {} - strip-indent@3.0.0: - dependencies: - min-indent: 1.0.1 - strip-indent@4.0.0: dependencies: min-indent: 1.0.1 @@ -22396,8 +22313,6 @@ snapshots: type-fest@0.6.0: {} - type-fest@0.8.1: {} - type-fest@1.4.0: {} type-fest@2.19.0: {} @@ -22448,6 +22363,17 @@ snapshots: dependencies: is-typedarray: 1.0.0 + typescript-eslint@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.31.0(jiti@2.4.2) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + typescript@5.8.3: {} ua-parser-js@1.0.40: {}