diff --git a/.changeset/changelog-github-custom.ts b/.changeset/changelog-github-custom.ts index 8e8260de844..3e07087b2ef 100644 --- a/.changeset/changelog-github-custom.ts +++ b/.changeset/changelog-github-custom.ts @@ -12,13 +12,15 @@ const changelogFunctions: ChangelogFunctions = { 'Please provide a repo to this changelog generator like this:\n"changelog": ["@changesets/changelog-github", { "repo": "org/repo" }]' ); } - if (dependenciesUpdated.length === 0) return ''; + if (dependenciesUpdated.length === 0) { + return ''; + } const changesetLink = `- Updated dependencies [${( await Promise.all( changesets.map(async (cs) => { if (cs.commit) { - let { links } = await getInfo({ + const { links } = await getInfo({ repo: options.repo, commit: cs.commit, }); @@ -45,12 +47,14 @@ const changelogFunctions: ChangelogFunctions = { let prFromSummary: number | undefined; let commitFromSummary: string | undefined; - let usersFromSummary: string[] = []; + const usersFromSummary: string[] = []; const replacedChangelog = changeset.summary .replace(/^\s*(?:pr|pull|pull\s+request):\s*#?(\d+)/im, (_, pr) => { - let num = Number(pr); - if (!isNaN(num)) prFromSummary = num; + const num = Number(pr); + if (!isNaN(num)) { + prFromSummary = num; + } return ''; }) .replace(/^\s*commit:\s*([^\s]+)/im, (_, commit) => { @@ -91,7 +95,7 @@ const changelogFunctions: ChangelogFunctions = { } const commitToFetchFrom = commitFromSummary || changeset.commit; if (commitToFetchFrom) { - let { links } = await getInfo({ + const { links } = await getInfo({ repo: options.repo, commit: commitToFetchFrom, }); diff --git a/.changeset/giant-carpets-brake.md b/.changeset/giant-carpets-brake.md new file mode 100644 index 00000000000..ee5a6e42808 --- /dev/null +++ b/.changeset/giant-carpets-brake.md @@ -0,0 +1,7 @@ +--- +'create-qwik': patch +'@builder.io/qwik-city': patch +'@builder.io/qwik': patch +--- + +Fix linting errors which were previously being ignored across the monorepo. diff --git a/.changeset/grumpy-ladybugs-wonder.md b/.changeset/grumpy-ladybugs-wonder.md new file mode 100644 index 00000000000..155c8b8a014 --- /dev/null +++ b/.changeset/grumpy-ladybugs-wonder.md @@ -0,0 +1,5 @@ +--- +'eslint-plugin-qwik': patch +--- + +Improve types and README documentation with clear configuration examples for ESLint 9+ (flat config). Added `globalIgnores` for more clarity and `tseslint.config` for better type inference inside the `parserOptions` option. diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index ec0b06b7b51..00000000000 --- a/.eslintignore +++ /dev/null @@ -1,33 +0,0 @@ -.history -.vscode -dist -dist-dev -lib -node_modules -tsc-out -external -*. -**/*.log -etc -target -temp -tsdoc-metadata.json -**/.DS_Store -*.mp4 -scripts/**/* -**/server/**/*.js -*.tsbuildinfo -packages/docs/api/**/* -packages/docs/public/repl/repl-sw.js* -packages/docs/src/routes/examples/apps/**/* -packages/docs/src/routes/playground/app/**/* -packages/docs/src/routes/tutorial/**/* -packages/qwik-labs/lib/**/* -packages/qwik-labs/lib-types/**/* -packages/qwik-labs/vite/**/* -packages/insights/drizzle.config.ts -packages/insights/panda.config.ts -starters/apps/base -starters/apps/library -starters/templates -vite.config.ts diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index ad3afe7dd8f..00000000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,45 +0,0 @@ -module.exports = { - env: { - browser: true, - es2021: true, - node: true, - }, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - // Enable this for testing but it makes the lint quite slow - // 'plugin:qwik/recommended', - ], - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaVersion: 12, - sourceType: 'module', - // Needed when using the qwik plugin - // project: ['./tsconfig.json'], - }, - plugins: [ - '@typescript-eslint', - 'no-only-tests', - // 'qwik' - ], - rules: { - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-inferrable-types': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/no-empty-interface': 'off', - '@typescript-eslint/no-namespace': 'off', - '@typescript-eslint/no-empty-function': 'off', - '@typescript-eslint/no-this-alias': 'off', - '@typescript-eslint/ban-types': 'off', - '@typescript-eslint/ban-ts-comment': 'off', - 'prefer-spread': 'off', - 'no-case-declarations': 'off', - 'no-console': ['error', { allow: ['warn', 'error'] }], - 'no-only-tests/no-only-tests': 'error', - '@typescript-eslint/no-unused-vars': 'off', - '@typescript-eslint/no-var-requires': 'off', - curly: 'error', - 'no-new-func': 'error', - }, -}; diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000000..0ff0bdcfac2 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,112 @@ +import globals from 'globals'; +import js from '@eslint/js'; +import tseslint from 'typescript-eslint'; +import noOnlyTests from 'eslint-plugin-no-only-tests'; +import { globalIgnores } from 'eslint/config'; +// import { qwikEslint9Plugin } from 'eslint-plugin-qwik'; + +const ignores = [ + '**/.history', + '**/.vscode', + '**/dist', + '**/dist-dev', + '**/lib', + '**/node_modules', + '**/tsc-out', + '**/external', + '**/*.', + '**/*.log', + '**/etc', + '**/target', + '**/temp', + '**/tsdoc-metadata.json', + '**/.DS_Store', + '**/*.mp4', + 'scripts', + '**/server/**/*.js', + '**/*.tsbuildinfo', + 'packages/docs/api', + 'packages/docs/public/repl/repl-sw.js*', + 'packages/docs/src/routes/examples/apps', + 'packages/docs/src/routes/playground/app', + 'packages/docs/src/routes/tutorial', + 'packages/qwik-labs/lib', + 'packages/qwik-labs/lib-types', + 'packages/qwik-labs/vite', + 'packages/insights/drizzle.config.ts', + 'packages/insights/panda.config.ts', + 'starters/apps/base', + 'starters/apps/library', + 'starters/templates', + '**/vite.config.ts', + // packages with eslint.config.mjs + 'packages/qwik-labs', + 'packages/insights', + 'starters', + // eslint.config.* + '**/eslint.config.mjs', + '**/eslint.config.js', +]; + +export default tseslint.config( + globalIgnores(ignores), + js.configs.recommended, + tseslint.configs.recommended, + // qwikEslint9Plugin.configs.recommended, + { + languageOptions: { + globals: { + ...globals.browser, + ...globals.node, + ...globals.es2021, + }, + parserOptions: { + // Needed when using the qwik plugin + // projectService: true, + // tsconfigRootDir: import.meta.dirname, + }, + }, + }, + { + plugins: { + 'no-only-tests': noOnlyTests, + }, + rules: { + 'no-only-tests/no-only-tests': 'error', + }, + name: 'no-only-tests', + }, + { + rules: { + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-inferrable-types': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-empty-interface': 'off', + '@typescript-eslint/no-namespace': 'off', + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/no-this-alias': 'off', + '@typescript-eslint/ban-types': 'off', + '@typescript-eslint/ban-ts-comment': 'off', + 'prefer-spread': 'off', + 'no-case-declarations': 'off', + 'no-console': ['error', { allow: ['warn', 'error'] }], + 'no-only-tests/no-only-tests': 'error', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-var-requires': 'off', + curly: 'error', + 'no-new-func': 'error', + '@typescript-eslint/no-empty-object-type': 'off', + '@typescript-eslint/no-unused-expressions': 'off', + '@typescript-eslint/no-unsafe-function-type': 'off', + '@typescript-eslint/no-require-imports': 'off', + '@typescript-eslint/no-wrapper-object-types': 'off', + }, + }, + { + files: ['packages/docs/**/*.{ts,tsx}'], + rules: { + 'no-console': 'off', + }, + } +); diff --git a/package.json b/package.json index ca1c59e5806..da22343edc3 100644 --- a/package.json +++ b/package.json @@ -9,16 +9,6 @@ "config": { "syncpack": { "versionGroups": [ - { - "label": "Allow ESLint 9 types in eslint-plugin-qwik", - "dependencies": [ - "@types/eslint" - ], - "packages": [ - "eslint-plugin-qwik" - ], - "policy": "matches@9.6.1" - }, { "label": "Be lenient in vite versions for prod. v4 is broken, v5 is good", "dependencyTypes": [ @@ -115,7 +105,7 @@ "@changesets/get-github-info": "0.6.0", "@changesets/types": "6.0.0", "@clack/prompts": "0.7.0", - "@eslint/eslintrc": "3.1.0", + "@eslint/js": "9.22.0", "@mdx-js/mdx": "3.0.1", "@microsoft/api-documenter": "7.24.2", "@microsoft/api-extractor": "7.43.1", @@ -127,7 +117,6 @@ "@types/brotli": "1.3.4", "@types/bun": "1.1.6", "@types/cross-spawn": "6.0.6", - "@types/eslint": "8.56.10", "@types/express": "4.17.21", "@types/node": "20.14.11", "@types/path-browserify": "1.0.2", @@ -136,8 +125,6 @@ "@types/semver": "7.5.8", "@types/tmp": "0.2.6", "@types/which-pm-runs": "1.0.2", - "@typescript-eslint/eslint-plugin": "7.16.1", - "@typescript-eslint/parser": "7.16.1", "all-contributors-cli": "6.26.1", "brotli": "1.3.3", "concurrently": "8.2.2", @@ -146,11 +133,12 @@ "csstype": "3.1.3", "dotenv": "16.4.5", "esbuild": "0.20.2", - "eslint": "8.57.0", - "eslint-plugin-no-only-tests": "3.1.0", + "eslint": "9.22.0", + "eslint-plugin-no-only-tests": "3.3.0", "eslint-plugin-qwik": "workspace:^", "execa": "8.0.1", "express": "4.20.0", + "globals": "16.0.0", "install": "0.13.0", "memfs": "4.14.0", "monaco-editor": "0.45.0", @@ -172,6 +160,7 @@ "tree-kill": "1.2.2", "tsx": "4.19.1", "typescript": "5.4.5", + "typescript-eslint": "8.26.1", "undici": "*", "vfile": "6.0.2", "vite": "5.3.5", @@ -237,8 +226,8 @@ "link.dist.npm": "cd packages/qwik && npm link && cd ../qwik-city && npm link && cd ../eslint-plugin-qwik && npm link && cd ../qwik-react && npm link", "link.dist.yarn": "cd packages/qwik && yarn link && cd ../qwik-city && yarn link && cd ../eslint-plugin-qwik && yarn link && cd ../qwik-react && yarn link", "lint": "pnpm lint.eslint && pnpm lint.prettier && pnpm lint.rust", - "lint.eslint": "eslint --cache \"**/*.ts*\"", - "lint.fix": "eslint --fix \"**/*.ts*\" && pnpm prettier.fix", + "lint.eslint": "eslint --cache \"**/*.ts*\" && pnpm -r --parallel lint", + "lint.fix": "eslint --fix \"**/*.ts*\" && pnpm -r --parallel lint.fix && pnpm prettier.fix", "lint.prettier": "prettier --cache --check .", "lint.rust": "make lint", "lint.syncpack": "syncpack list-mismatches", diff --git a/packages/create-qwik/index.ts b/packages/create-qwik/index.ts index b7f4ac8dd4e..2552a2f9f03 100644 --- a/packages/create-qwik/index.ts +++ b/packages/create-qwik/index.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import { runCreateCli } from './src/run-create-cli'; import { runCreateInteractiveCli } from './src/run-create-interactive-cli'; import { panic, printHeader } from '../qwik/src/cli/utils/utils'; diff --git a/packages/create-qwik/src/run-create-interactive-cli.ts b/packages/create-qwik/src/run-create-interactive-cli.ts index 788bf5228be..71b5f172789 100644 --- a/packages/create-qwik/src/run-create-interactive-cli.ts +++ b/packages/create-qwik/src/run-create-interactive-cli.ts @@ -7,7 +7,7 @@ import { join, relative } from 'node:path'; import type { CreateAppResult } from '../../qwik/src/cli/types'; import { clearDir } from './helpers/clearDir'; import { createApp } from './create-app'; -/* eslint-disable no-console */ + import fs from 'node:fs'; import { getRandomJoke } from './helpers/jokes'; import { installDepsCli } from './helpers/installDepsCli'; diff --git a/packages/docs/codesandbox.sync.ts b/packages/docs/codesandbox.sync.ts index 8ac48e1e89f..5587ce9ab42 100644 --- a/packages/docs/codesandbox.sync.ts +++ b/packages/docs/codesandbox.sync.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import { readdirSync, readFileSync, writeFileSync } from 'node:fs'; import { join } from 'node:path'; diff --git a/packages/docs/contributors.ts b/packages/docs/contributors.ts index 0550f4b40d7..6b91e2726ae 100644 --- a/packages/docs/contributors.ts +++ b/packages/docs/contributors.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import { fetch } from 'undici'; import fs from 'node:fs'; import path from 'node:path'; diff --git a/packages/docs/package.json b/packages/docs/package.json index f50c3307800..a510fb60f11 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -21,6 +21,10 @@ "@mui/system": "5.16.4", "@mui/x-data-grid": "6.20.4", "@qwik-ui/headless": "0.5.0", + "@shikijs/colorized-brackets": "3.1.0", + "@shikijs/rehype": "3.1.0", + "@shikijs/transformers": "3.1.0", + "@shikijs/types": "3.1.0", "@supabase/supabase-js": "2.44.4", "@types/leaflet": "1.9.12", "@types/prismjs": "1.26.4", @@ -43,6 +47,7 @@ "qwik-image": "0.0.10", "react": "18.3.1", "react-dom": "18.3.1", + "shiki": "3.1.0", "snarkdown": "2.0.0", "tailwindcss": "3.4.6", "terser": "5.31.3", @@ -52,11 +57,6 @@ "valibot": "0.33.3", "vite": "5.3.5", "vite-plugin-inspect": "0.8.5", - "shiki": "3.1.0", - "@shikijs/rehype": "3.1.0", - "@shikijs/transformers": "3.1.0", - "@shikijs/colorized-brackets": "3.1.0", - "@shikijs/types": "3.1.0", "wrangler": "3.65.1" }, "engines": { diff --git a/packages/docs/src/components/router-head/router-head.tsx b/packages/docs/src/components/router-head/router-head.tsx index 5b80ec0557a..b9b512370d3 100644 --- a/packages/docs/src/components/router-head/router-head.tsx +++ b/packages/docs/src/components/router-head/router-head.tsx @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import { component$ } from '@builder.io/qwik'; import { useDocumentHead, useLocation } from '@builder.io/qwik-city'; import { Social } from './social'; diff --git a/packages/docs/src/repl/repl-version.ts b/packages/docs/src/repl/repl-version.ts index eed2a554bc9..40608bbac0b 100644 --- a/packages/docs/src/repl/repl-version.ts +++ b/packages/docs/src/repl/repl-version.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import { QWIK_PKG_NAME, bundled } from './bundled'; const bundledVersion = bundled[QWIK_PKG_NAME].version; diff --git a/packages/docs/src/repl/repl.tsx b/packages/docs/src/repl/repl.tsx index aef5dfef6fc..5213ec856eb 100644 --- a/packages/docs/src/repl/repl.tsx +++ b/packages/docs/src/repl/repl.tsx @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import { component$, noSerialize, diff --git a/packages/docs/src/repl/worker/app-bundle-client.ts b/packages/docs/src/repl/worker/app-bundle-client.ts index 6bc1dcbd5a1..3258b4063dc 100644 --- a/packages/docs/src/repl/worker/app-bundle-client.ts +++ b/packages/docs/src/repl/worker/app-bundle-client.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import type { InputOptions, OutputAsset, OutputChunk } from 'rollup'; import type { Diagnostic, QwikRollupPluginOptions } from '@builder.io/qwik/optimizer'; import type { ReplInputOptions, ReplModuleOutput, ReplResult } from '../types'; diff --git a/packages/docs/src/repl/worker/app-bundle-ssr.ts b/packages/docs/src/repl/worker/app-bundle-ssr.ts index 9da8b1bfc8b..156b9021879 100644 --- a/packages/docs/src/repl/worker/app-bundle-ssr.ts +++ b/packages/docs/src/repl/worker/app-bundle-ssr.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import type { InputOptions } from 'rollup'; import type { Diagnostic, QwikRollupPluginOptions } from '@builder.io/qwik/optimizer'; import type { ReplInputOptions, ReplResult } from '../types'; diff --git a/packages/docs/src/repl/worker/app-ssr-html.ts b/packages/docs/src/repl/worker/app-ssr-html.ts index 9804c37427c..71cfb3df0f7 100644 --- a/packages/docs/src/repl/worker/app-ssr-html.ts +++ b/packages/docs/src/repl/worker/app-ssr-html.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import type { RenderOptions, RenderToStringResult } from '@builder.io/qwik/server'; import type { ReplInputOptions, ReplResult } from '../types'; import type { QwikWorkerGlobal } from './repl-service-worker'; diff --git a/packages/docs/src/repl/worker/app-update.ts b/packages/docs/src/repl/worker/app-update.ts index c3579b4dd3e..e9f22157d67 100644 --- a/packages/docs/src/repl/worker/app-update.ts +++ b/packages/docs/src/repl/worker/app-update.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import type { ReplInputOptions, ReplResult } from '../types'; import { appBundleClient } from './app-bundle-client'; import { appBundleSsr } from './app-bundle-ssr'; diff --git a/packages/docs/src/repl/worker/repl-dependencies.ts b/packages/docs/src/repl/worker/repl-dependencies.ts index b3f529efbac..ad2bec490f9 100644 --- a/packages/docs/src/repl/worker/repl-dependencies.ts +++ b/packages/docs/src/repl/worker/repl-dependencies.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import type { ReplInputOptions } from '../types'; import { QWIK_PKG_NAME, QWIK_REPL_DEPS_CACHE } from './repl-constants'; import type { QwikWorkerGlobal } from './repl-service-worker'; diff --git a/packages/docs/src/repl/worker/repl-server.ts b/packages/docs/src/repl/worker/repl-server.ts index 460c703b007..ff447157bb9 100644 --- a/packages/docs/src/repl/worker/repl-server.ts +++ b/packages/docs/src/repl/worker/repl-server.ts @@ -5,7 +5,6 @@ * - Public static html source file: "public/repl/~repl-server-host.html" */ -/* eslint-disable no-console */ import type { ReplMessage, ReplResult } from '../types'; export const initReplServer = (win: Window, doc: Document, nav: Navigator) => { diff --git a/packages/docs/src/routes/community/layout.tsx b/packages/docs/src/routes/community/layout.tsx index baf0fd04bba..479dfa3730c 100644 --- a/packages/docs/src/routes/community/layout.tsx +++ b/packages/docs/src/routes/community/layout.tsx @@ -6,7 +6,6 @@ import { OnThisPage } from '../../components/on-this-page/on-this-page'; import { ContentNav } from '../../components/content-nav/content-nav'; import styles from '../docs/docs.css?inline'; -// eslint-disable-next-line export { useMarkdownItems } from '../../components/sidebar/sidebar'; export default component$(() => { diff --git a/packages/docs/src/routes/demo/.eslintrc.cjs b/packages/docs/src/routes/demo/.eslintrc.cjs deleted file mode 100644 index 33807f70b69..00000000000 --- a/packages/docs/src/routes/demo/.eslintrc.cjs +++ /dev/null @@ -1,42 +0,0 @@ -module.exports = { - root: true, - env: { - browser: true, - es2021: true, - node: true, - }, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - // 'plugin:qwik/recommended', - ], - parser: '@typescript-eslint/parser', - parserOptions: { - tsconfigRootDir: __dirname, - project: ['./tsconfig.json'], - ecmaVersion: 2021, - sourceType: 'module', - ecmaFeatures: { - jsx: true, - }, - }, - plugins: ['@typescript-eslint'], - rules: { - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-inferrable-types': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/no-empty-interface': 'off', - '@typescript-eslint/no-namespace': 'off', - '@typescript-eslint/no-empty-function': 'off', - '@typescript-eslint/no-this-alias': 'off', - '@typescript-eslint/ban-types': 'off', - '@typescript-eslint/ban-ts-comment': 'off', - 'prefer-spread': 'off', - 'no-case-declarations': 'off', - 'no-console': 'off', - '@typescript-eslint/no-unused-vars': ['error'], - '@typescript-eslint/consistent-type-imports': 'warn', - 'qwik/no-react-props': 'off', - }, -}; diff --git a/packages/docs/src/routes/demo/cookbook/drag&drop/advanced/index.tsx b/packages/docs/src/routes/demo/cookbook/drag&drop/advanced/index.tsx index b0c1b02311f..4698b3d17d4 100644 --- a/packages/docs/src/routes/demo/cookbook/drag&drop/advanced/index.tsx +++ b/packages/docs/src/routes/demo/cookbook/drag&drop/advanced/index.tsx @@ -53,7 +53,9 @@ export default component$(() => { const targetId = parseInt( (e.target as HTMLDivElement).dataset.id || '0' ); - if (targetId === 0) return; + if (targetId === 0) { + return; + } const targetIndex = items1.value.findIndex( (i) => i.id === targetId @@ -68,7 +70,9 @@ export default component$(() => { items1.value = newItems; } else { // Sorting between containers - if (!item) return; + if (!item) { + return; + } items2.value = items2.value.filter((i) => i.id !== itemId); insertElement(newItems, targetIndex, item); items1.value = newItems; @@ -133,7 +137,9 @@ export default component$(() => { const targetId = parseInt( (e.target as HTMLDivElement).dataset.id || '0' ); - if (targetId === 0) return; + if (targetId === 0) { + return; + } const newItems = [...items2.value]; const draggedIndex = items2.value.findIndex( (i) => i.id === itemId @@ -147,7 +153,9 @@ export default component$(() => { items2.value = newItems; } else { // Sorting between containers - if (!item) return; + if (!item) { + return; + } items1.value = items1.value.filter((i) => i.id !== itemId); insertElement(newItems, targetIndex, item); items2.value = newItems; diff --git a/packages/docs/src/routes/demo/cookbook/portal/portal-provider.tsx b/packages/docs/src/routes/demo/cookbook/portal/portal-provider.tsx index 6345f6899ef..60d0ee0b6d4 100644 --- a/packages/docs/src/routes/demo/cookbook/portal/portal-provider.tsx +++ b/packages/docs/src/routes/demo/cookbook/portal/portal-provider.tsx @@ -98,7 +98,6 @@ export const WrapJsxInContext = component$<{ contexts: Array>; }>(({ jsx, contexts }) => { contexts.forEach(({ id, value }) => { - // eslint-disable-next-line useContextProvider(id, value); }); return ( diff --git a/packages/docs/src/routes/demo/integration/modular-forms/index.tsx b/packages/docs/src/routes/demo/integration/modular-forms/index.tsx index 96d6b110c25..90e5076318a 100644 --- a/packages/docs/src/routes/demo/integration/modular-forms/index.tsx +++ b/packages/docs/src/routes/demo/integration/modular-forms/index.tsx @@ -1,5 +1,5 @@ // @ts-nocheck -/* eslint-disable @typescript-eslint/no-unused-vars */ + import { $, component$, type QRL } from '@builder.io/qwik'; import { routeLoader$ } from '@builder.io/qwik-city'; import type { InitialValues, SubmitHandler } from '@modular-forms/qwik'; diff --git a/packages/docs/src/routes/demo/layout.tsx b/packages/docs/src/routes/demo/layout.tsx index 1537aaaaa19..c5537cbfe27 100644 --- a/packages/docs/src/routes/demo/layout.tsx +++ b/packages/docs/src/routes/demo/layout.tsx @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import { component$, Slot } from '@builder.io/qwik'; import { useStyles$ } from '@builder.io/qwik'; import STYLES from './demo-reset.css?inline'; @@ -21,6 +20,7 @@ function logQSymbols() { const consoleUl = document.getElementById('console')!; consoleUl.className = 'console'; consoleUl.innerHTML = '

Console

'; + // eslint-disable-next-line no-constant-binary-expression false && document.addEventListener('qsymbol', (e) => { const detail = (e as any as { detail: { symbol: string } }).detail; diff --git a/packages/docs/src/routes/demo/react/children/react.tsx b/packages/docs/src/routes/demo/react/children/react.tsx index d836e53327f..40597267175 100644 --- a/packages/docs/src/routes/demo/react/children/react.tsx +++ b/packages/docs/src/routes/demo/react/children/react.tsx @@ -1,4 +1,5 @@ /** @jsxImportSource react */ + import { type ReactNode } from 'react'; import { qwikify$ } from '@builder.io/qwik-react'; diff --git a/packages/docs/src/routes/demo/react/counter-simple-hover/react.tsx b/packages/docs/src/routes/demo/react/counter-simple-hover/react.tsx index fbbc042beaa..a8b03e8ac8d 100644 --- a/packages/docs/src/routes/demo/react/counter-simple-hover/react.tsx +++ b/packages/docs/src/routes/demo/react/counter-simple-hover/react.tsx @@ -1,4 +1,5 @@ /** @jsxImportSource react */ + import { qwikify$ } from '@builder.io/qwik-react'; import { useState } from 'react'; diff --git a/packages/docs/src/routes/demo/react/counter-two-islands-host/react.tsx b/packages/docs/src/routes/demo/react/counter-two-islands-host/react.tsx index c1f9497425e..28c161bc411 100644 --- a/packages/docs/src/routes/demo/react/counter-two-islands-host/react.tsx +++ b/packages/docs/src/routes/demo/react/counter-two-islands-host/react.tsx @@ -1,4 +1,5 @@ /** @jsxImportSource react */ + import { qwikify$ } from '@builder.io/qwik-react'; import { type ReactNode } from 'react'; diff --git a/packages/docs/src/routes/demo/react/counter-two-islands/react.tsx b/packages/docs/src/routes/demo/react/counter-two-islands/react.tsx index 797056215bd..de18d5bfbf6 100644 --- a/packages/docs/src/routes/demo/react/counter-two-islands/react.tsx +++ b/packages/docs/src/routes/demo/react/counter-two-islands/react.tsx @@ -1,4 +1,5 @@ /** @jsxImportSource react */ + import { qwikify$ } from '@builder.io/qwik-react'; function Button({ onClick }: { onClick: () => void }) { diff --git a/packages/docs/src/routes/demo/react/mui/react.tsx b/packages/docs/src/routes/demo/react/mui/react.tsx index 570460ef335..0fa590ca0e9 100644 --- a/packages/docs/src/routes/demo/react/mui/react.tsx +++ b/packages/docs/src/routes/demo/react/mui/react.tsx @@ -1,4 +1,5 @@ /** @jsxImportSource react */ + import { qwikify$ } from '@builder.io/qwik-react'; import Tabs from '@mui/material/Tabs'; import Tab from '@mui/material/Tab'; diff --git a/packages/docs/src/routes/demo/resumability/index.tsx b/packages/docs/src/routes/demo/resumability/index.tsx index 851e23fffa3..e78dac69343 100644 --- a/packages/docs/src/routes/demo/resumability/index.tsx +++ b/packages/docs/src/routes/demo/resumability/index.tsx @@ -47,7 +47,9 @@ export const HoverProvider = component$(() => { new CustomEvent('hover', { bubbles: true, detail: async (jsx: JSXOutput) => { - if (state.close) return; + if (state.close) { + return; + } state.currentTarget = e.target as HTMLElement; state.close = noSerialize(await portal('popup', jsx)); }, diff --git a/packages/docs/src/routes/demo/state/no-serialize/.eslintrc.cjs b/packages/docs/src/routes/demo/state/no-serialize/.eslintrc.cjs deleted file mode 100644 index 342a734ad12..00000000000 --- a/packages/docs/src/routes/demo/state/no-serialize/.eslintrc.cjs +++ /dev/null @@ -1,44 +0,0 @@ -// REMOVE THIS FILE ONCE: https://github.com/QwikDev/qwik/issues/3719 is fixed -module.exports = { - root: true, - env: { - browser: true, - es2021: true, - node: true, - }, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:qwik/recommended', - ], - parser: '@typescript-eslint/parser', - parserOptions: { - tsconfigRootDir: __dirname, - project: ['../../tsconfig.json'], - ecmaVersion: 2021, - sourceType: 'module', - ecmaFeatures: { - jsx: true, - }, - }, - plugins: ['@typescript-eslint'], - rules: { - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-inferrable-types': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/no-empty-interface': 'off', - '@typescript-eslint/no-namespace': 'off', - '@typescript-eslint/no-empty-function': 'off', - '@typescript-eslint/no-this-alias': 'off', - '@typescript-eslint/ban-types': 'off', - '@typescript-eslint/ban-ts-comment': 'off', - 'prefer-spread': 'off', - 'no-case-declarations': 'off', - 'no-console': 'off', - '@typescript-eslint/no-unused-vars': ['error'], - '@typescript-eslint/consistent-type-imports': 'warn', - 'qwik/no-react-props': 'off', - 'qwik/valid-lexical-scope': 'off', - }, -}; diff --git a/packages/docs/src/routes/demo/state/no-serialize/index.tsx b/packages/docs/src/routes/demo/state/no-serialize/index.tsx index 489300084fa..f77bb419eee 100644 --- a/packages/docs/src/routes/demo/state/no-serialize/index.tsx +++ b/packages/docs/src/routes/demo/state/no-serialize/index.tsx @@ -15,7 +15,6 @@ export default component$(() => { monacoInstance: undefined, }); - // eslint-disable-next-line qwik/no-use-visible-task useVisibleTask$(() => { const editor = monacoEditor.create(editorRef.value!, { value: 'Hello, world!', diff --git a/packages/docs/src/routes/demo/tsconfig.json b/packages/docs/src/routes/demo/tsconfig.json index 88465ce0797..b56a316b33d 100644 --- a/packages/docs/src/routes/demo/tsconfig.json +++ b/packages/docs/src/routes/demo/tsconfig.json @@ -21,6 +21,6 @@ "~/*": ["./src/*"] } }, - "files": ["./.eslintrc.cjs", "**/*.jsx"], + "files": ["**/*.jsx"], "include": ["."] } diff --git a/packages/docs/src/routes/docs/layout.tsx b/packages/docs/src/routes/docs/layout.tsx index 346c1a1ad10..ae69c33a018 100644 --- a/packages/docs/src/routes/docs/layout.tsx +++ b/packages/docs/src/routes/docs/layout.tsx @@ -9,7 +9,6 @@ import { createBreadcrumbs, SideBar } from '../../components/sidebar/sidebar'; import { GlobalStore } from '../../context'; import styles from './docs.css?inline'; -// eslint-disable-next-line export { useMarkdownItems } from '../../components/sidebar/sidebar'; export default component$(() => { diff --git a/packages/eslint-plugin-qwik/README.md b/packages/eslint-plugin-qwik/README.md index 4a1f390d900..7416e73dea7 100644 --- a/packages/eslint-plugin-qwik/README.md +++ b/packages/eslint-plugin-qwik/README.md @@ -23,19 +23,14 @@ yarn add -D eslint-plugin-qwik import js from '@eslint/js'; import globals from 'globals'; import tseslint from 'typescript-eslint'; +import { globalIgnores } from 'eslint/config'; import { qwikEslint9Plugin } from 'eslint-plugin-qwik'; -export const qwikConfig = [ +export const qwikConfig = tseslint.config( + globalIgnores(['node_modules/*', 'dist/*', 'server/*', 'tmp/*']), js.configs.recommended, - ...tseslint.configs.recommended, - { - languageOptions: { - parserOptions: { - projectService: true, - tsconfigRootDir: import.meta.dirname, - }, - }, - }, + tseslint.configs.recommended, + qwikEslint9Plugin.configs.recommended, { files: ['**/*.{js,mjs,cjs,jsx,mjsx,ts,tsx,mtsx}'], languageOptions: { @@ -44,17 +39,15 @@ export const qwikConfig = [ ...globals.browser, ...globals.node, }, + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname, + }, }, - }, - ...qwikEslint9Plugin.configs.recommended, - { - ignores: ['node_modules/*', 'dist/*', 'server/*', 'tmp/*'], - }, -]; + } +); ``` -> `ignores` must always be the last configuration in the array. Note that in shared configs, the `ignores` must be defined where the config is used, not in the shared config. - ### Legacy config (`eslint < 9`) ```js diff --git a/packages/eslint-plugin-qwik/index.ts b/packages/eslint-plugin-qwik/index.ts index 25fa49d59ff..88ddea738e0 100644 --- a/packages/eslint-plugin-qwik/index.ts +++ b/packages/eslint-plugin-qwik/index.ts @@ -26,7 +26,7 @@ const rules = { 'jsx-img': jsxImg, 'jsx-a': jsxAtag, 'no-use-visible-task': noUseVisibleTask, -} as const satisfies Rules; +} satisfies Rules; const recommendedRulesLevels = { 'qwik/valid-lexical-scope': 'error', @@ -40,7 +40,7 @@ const recommendedRulesLevels = { 'qwik/jsx-img': 'warn', 'qwik/jsx-a': 'warn', 'qwik/no-use-visible-task': 'warn', -} as const satisfies TSESLint.FlatConfig.Rules; +} satisfies TSESLint.FlatConfig.Rules; const strictRulesLevels = { 'qwik/valid-lexical-scope': 'error', @@ -54,7 +54,7 @@ const strictRulesLevels = { 'qwik/jsx-img': 'error', 'qwik/jsx-a': 'error', 'qwik/no-use-visible-task': 'warn', -} as const satisfies TSESLint.FlatConfig.Rules; +} satisfies TSESLint.FlatConfig.Rules; const configs = { recommended: { @@ -65,9 +65,9 @@ const configs = { plugins: ['qwik'], rules: strictRulesLevels, }, -} as const satisfies Record; +} satisfies Record; -const qwikEslint9Plugin: TSESLint.FlatConfig.Plugin = { +const qwikEslint9Plugin = { configs: { get recommended() { return recommendedConfig; @@ -81,24 +81,24 @@ const qwikEslint9Plugin: TSESLint.FlatConfig.Plugin = { version: pkg.version, }, rules, -}; +} as const; -const recommendedConfig: TSESLint.FlatConfig.ConfigArray = [ +const recommendedConfig = [ { plugins: { qwik: qwikEslint9Plugin, }, rules: recommendedRulesLevels, }, -]; +] satisfies TSESLint.FlatConfig.ConfigArray; -const strictConfig: TSESLint.FlatConfig.ConfigArray = [ +const strictConfig = [ { plugins: { qwik: qwikEslint9Plugin, }, rules: strictRulesLevels, }, -]; +] satisfies TSESLint.FlatConfig.ConfigArray; export { configs, qwikEslint9Plugin, rules }; diff --git a/packages/eslint-plugin-qwik/package.json b/packages/eslint-plugin-qwik/package.json index 1df2360e6f3..9f1bd4a11f0 100644 --- a/packages/eslint-plugin-qwik/package.json +++ b/packages/eslint-plugin-qwik/package.json @@ -11,7 +11,6 @@ "devDependencies": { "@builder.io/qwik": "workspace:^", "@builder.io/qwik-city": "workspace:^", - "@types/eslint": "9.6.1", "@types/estree": "1.0.5", "@typescript-eslint/rule-tester": "8.14.0", "redent": "4.0.0" @@ -31,6 +30,9 @@ ], "license": "MIT", "main": "dist/index.js", + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, "repository": { "type": "git", "url": "https://github.com/QwikDev/qwik.git", diff --git a/packages/eslint-plugin-qwik/src/jsxKey.ts b/packages/eslint-plugin-qwik/src/jsxKey.ts index b45759bccb2..3831218f606 100644 --- a/packages/eslint-plugin-qwik/src/jsxKey.ts +++ b/packages/eslint-plugin-qwik/src/jsxKey.ts @@ -248,7 +248,7 @@ export const jsxKey = { }, // Array.prototype.map - // eslint-disable-next-line no-multi-str + 'CallExpression[callee.type="MemberExpression"][callee.property.name="map"],\ CallExpression[callee.type="OptionalMemberExpression"][callee.property.name="map"],\ OptionalCallExpression[callee.type="MemberExpression"][callee.property.name="map"],\ diff --git a/packages/eslint-plugin-qwik/src/loaderLocation.ts b/packages/eslint-plugin-qwik/src/loaderLocation.ts index 4dac9297c89..282a19a99d9 100644 --- a/packages/eslint-plugin-qwik/src/loaderLocation.ts +++ b/packages/eslint-plugin-qwik/src/loaderLocation.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import type { Rule } from 'eslint'; import { QwikEslintExamples } from '../examples'; diff --git a/packages/eslint-plugin-qwik/src/unusedServer.ts b/packages/eslint-plugin-qwik/src/unusedServer.ts index f059f1e0c6c..5db29956307 100644 --- a/packages/eslint-plugin-qwik/src/unusedServer.ts +++ b/packages/eslint-plugin-qwik/src/unusedServer.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import type { Rule } from 'eslint'; import { QwikEslintExamples } from '../examples'; diff --git a/packages/eslint-plugin-qwik/src/useMethodUsage.ts b/packages/eslint-plugin-qwik/src/useMethodUsage.ts index c65fa6865cd..21b53c4d798 100644 --- a/packages/eslint-plugin-qwik/src/useMethodUsage.ts +++ b/packages/eslint-plugin-qwik/src/useMethodUsage.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import type { Rule } from 'eslint'; import type { CallExpression } from 'estree'; import type { QwikEslintExamples } from '../examples'; diff --git a/packages/eslint-plugin-qwik/src/validLexicalScope.ts b/packages/eslint-plugin-qwik/src/validLexicalScope.ts index ef15c0f977f..8ee7ea80240 100644 --- a/packages/eslint-plugin-qwik/src/validLexicalScope.ts +++ b/packages/eslint-plugin-qwik/src/validLexicalScope.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import * as ESLintUtils from '@typescript-eslint/utils/eslint-utils'; import ts from 'typescript'; import type { Identifier } from 'estree'; diff --git a/packages/insights/.eslintignore b/packages/insights/.eslintignore deleted file mode 100644 index afff1b6bd36..00000000000 --- a/packages/insights/.eslintignore +++ /dev/null @@ -1,45 +0,0 @@ -**/*.log -**/.DS_Store -*. -.vscode/settings.json -.history -.yarn -bazel-* -bazel-bin -bazel-out -bazel-qwik -bazel-testlogs -dist -dist-dev -lib -lib-types -etc -external -node_modules -temp -tsc-out -tsdoc-metadata.json -target -output -rollup.config.js -build -.cache -.vscode -.rollup.cache -dist -tsconfig.tsbuildinfo -vite.config.ts -*.spec.tsx -*.spec.ts -.netlify -pnpm-lock.yaml -package-lock.json -yarn.lock -server - -# Panda CSS -src/styled-system -panda.config.ts - -# Drizzle -drizzle.config.ts diff --git a/packages/insights/.eslintrc.cjs b/packages/insights/.eslintrc.cjs deleted file mode 100644 index 03a22c7348e..00000000000 --- a/packages/insights/.eslintrc.cjs +++ /dev/null @@ -1,42 +0,0 @@ -module.exports = { - root: true, - env: { - browser: true, - es2021: true, - node: true, - }, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:qwik/recommended', - ], - parser: '@typescript-eslint/parser', - parserOptions: { - tsconfigRootDir: __dirname, - project: ['./tsconfig.json'], - ecmaVersion: 2021, - sourceType: 'module', - ecmaFeatures: { - jsx: true, - }, - }, - plugins: ['@typescript-eslint'], - rules: { - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-inferrable-types': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/no-empty-interface': 'off', - '@typescript-eslint/no-namespace': 'off', - '@typescript-eslint/no-empty-function': 'off', - '@typescript-eslint/no-this-alias': 'off', - '@typescript-eslint/ban-types': 'off', - '@typescript-eslint/ban-ts-comment': 'off', - 'prefer-spread': 'off', - 'no-case-declarations': 'off', - 'no-console': 'off', - '@typescript-eslint/no-unused-vars': ['error'], - '@typescript-eslint/consistent-type-imports': 'warn', - '@typescript-eslint/no-unnecessary-condition': 'warn', - }, -}; diff --git a/packages/insights/eslint.config.mjs b/packages/insights/eslint.config.mjs new file mode 100644 index 00000000000..80b5d86fcb6 --- /dev/null +++ b/packages/insights/eslint.config.mjs @@ -0,0 +1,97 @@ +import globals from 'globals'; +import js from '@eslint/js'; +import tseslint from 'typescript-eslint'; +import { qwikEslint9Plugin } from 'eslint-plugin-qwik'; +import { globalIgnores } from 'eslint/config'; + +const ignores = [ + '**/*.log', + '**/.DS_Store', + '**/*.', + '.vscode/settings.json', + '**/.history', + '**/.yarn', + '**/bazel-*', + '**/bazel-bin', + '**/bazel-out', + '**/bazel-qwik', + '**/bazel-testlogs', + '**/dist', + '**/dist-dev', + '**/lib', + '**/lib-types', + '**/etc', + '**/external', + '**/node_modules', + '**/temp', + '**/tsc-out', + '**/tsdoc-metadata.json', + '**/target', + '**/output', + '**/rollup.config.js', + '**/build', + '**/.cache', + '**/.vscode', + '**/.rollup.cache', + '**/dist', + '**/tsconfig.tsbuildinfo', + '**/vite.config.ts', + '**/*.spec.tsx', + '**/*.spec.ts', + '**/.netlify', + '**/pnpm-lock.yaml', + '**/package-lock.json', + '**/yarn.lock', + '**/server', + 'src/styled-system', + '**/panda.config.ts', + '**/drizzle.config.ts', + 'eslint.config.mjs', +]; + +export default tseslint.config( + globalIgnores(ignores), + js.configs.recommended, + tseslint.configs.recommended, + qwikEslint9Plugin.configs.recommended, + { + languageOptions: { + globals: { + ...globals.browser, + ...globals.node, + ...globals.es2021, + }, + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname, + ecmaFeatures: { + jsx: true, + }, + }, + }, + }, + { + rules: { + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-inferrable-types': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-empty-interface': 'off', + '@typescript-eslint/no-namespace': 'off', + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/no-this-alias': 'off', + '@typescript-eslint/ban-types': 'off', + '@typescript-eslint/ban-ts-comment': 'off', + 'prefer-spread': 'off', + 'no-case-declarations': 'off', + 'no-console': 'off', + '@typescript-eslint/consistent-type-imports': 'warn', + '@typescript-eslint/no-unnecessary-condition': 'warn', + '@typescript-eslint/no-unused-expressions': 'off', + '@typescript-eslint/no-empty-object-type': 'off', + '@typescript-eslint/no-unsafe-function-type': 'off', + '@typescript-eslint/no-unused-vars': 'off', + curly: 'error', + }, + } +); diff --git a/packages/insights/package.json b/packages/insights/package.json index 16641354707..2dbf611d5de 100644 --- a/packages/insights/package.json +++ b/packages/insights/package.json @@ -17,22 +17,22 @@ "@builder.io/qwik-city": "workspace:^", "@builder.io/qwik-labs": "workspace:^", "@builder.io/vite-plugin-macro": "0.0.7", + "@eslint/js": "9.22.0", "@netlify/edge-functions": "2.10.0", "@types/density-clustering": "1.3.3", - "@types/eslint": "8.56.10", "@types/node": "20.14.11", - "@typescript-eslint/eslint-plugin": "7.16.1", - "@typescript-eslint/parser": "7.16.1", "autoprefixer": "10.4.19", "better-sqlite3": "9.6.0", - "eslint": "8.57.0", + "eslint": "9.22.0", "eslint-plugin-qwik": "workspace:^", + "globals": "16.0.0", "netlify-cli": "17.37.2", "postcss": "8.4.39", "prettier": "3.3.3", "prettier-plugin-tailwindcss": "0.5.14", "tailwindcss": "3.4.6", "typescript": "5.4.5", + "typescript-eslint": "8.26.1", "undici": "*", "vite": "5.3.5", "vite-tsconfig-paths": "4.3.2", @@ -60,6 +60,7 @@ "fmt": "prettier --write .", "fmt.check": "prettier --check .", "lint": "eslint \"src/**/*.ts*\"", + "lint.fix": "eslint --fix \"src/**/*.ts*\"", "preview": "qwik build preview && vite preview --open", "qManifest.post": "curl -X POST -H 'Content-Type: application/json' -d @./dist/q-manifest.json https://qwik-insights.builder.io/api/v1/221smyuj5gl/post/manifest/", "qManifest.post.local": "curl -X POST -H 'Content-Type: application/json' -d @./dist/q-manifest.json http://localhost:5173/api/v1/221smyuj5gl/post/manifest/", diff --git a/packages/insights/src/components/icons/copy.tsx b/packages/insights/src/components/icons/copy.tsx index 9f525337d3b..33094e383c1 100644 --- a/packages/insights/src/components/icons/copy.tsx +++ b/packages/insights/src/components/icons/copy.tsx @@ -18,9 +18,6 @@ export const CopyIcon = component$(({ onClick$, ...props }) => { class="wrapper" preventdefault:click onClick$={() => { - // Disable this lint issue until new Lint version is released with the fix - // eslint version 1.3.1 and higher should work - // eslint-disable-next-line onClick$(); copiedSig.value = true; setTimeout(() => (copiedSig.value = false), 2000); diff --git a/packages/insights/src/routes/api/v1/[publicApiKey]/post/index.tsx b/packages/insights/src/routes/api/v1/[publicApiKey]/post/index.tsx index 78fb608f58b..7137ad70735 100644 --- a/packages/insights/src/routes/api/v1/[publicApiKey]/post/index.tsx +++ b/packages/insights/src/routes/api/v1/[publicApiKey]/post/index.tsx @@ -48,9 +48,13 @@ export const onPost: RequestHandler = async ({ exit, json, request, params }) => }; function cleanupSymbolName(symbolName?: string | null): string | null { - if (!symbolName) return null; + if (!symbolName) { + return null; + } const shortName = symbolName.substring(symbolName.lastIndexOf('_') + 1 || 0); - if (shortName == 'hW') return null; + if (shortName == 'hW') { + return null; + } return shortName; } function migrate1(payloadJson: any) { diff --git a/packages/insights/src/routes/app/[publicApiKey]/edit/index.tsx b/packages/insights/src/routes/app/[publicApiKey]/edit/index.tsx index 7c5ab676f70..8f4be32e28a 100644 --- a/packages/insights/src/routes/app/[publicApiKey]/edit/index.tsx +++ b/packages/insights/src/routes/app/[publicApiKey]/edit/index.tsx @@ -68,7 +68,6 @@ export const useAddUserAction = routeAction$( export default component$(() => { // const form = useFormLoader(); - // eslint-disable-next-line @typescript-eslint/no-unused-vars const [loginForm, { Form: ModularForm, Field }] = useForm({ loader: useFormLoader(), action: useFormAction(), diff --git a/packages/insights/src/routes/app/index.tsx b/packages/insights/src/routes/app/index.tsx index 410d317e5d3..feda32e2f1a 100644 --- a/packages/insights/src/routes/app/index.tsx +++ b/packages/insights/src/routes/app/index.tsx @@ -44,7 +44,7 @@ export default component$(() => { (filter.value = target.value.toLocaleLowerCase())} + onInput$={(_e, target) => (filter.value = target.value.toLocaleLowerCase())} />
diff --git a/packages/insights/src/stats/edges.ts b/packages/insights/src/stats/edges.ts index c315ceb4919..78afce17738 100644 --- a/packages/insights/src/stats/edges.ts +++ b/packages/insights/src/stats/edges.ts @@ -110,11 +110,15 @@ export function computeSymbolGraph(rows: SymbolPairs[], details?: SymbolDetail[] function fixNames(row: SymbolPairs) { row.to = row.to.split('_').pop()!; row.from = row.from == null ? null : row.from.split('_').pop()!; - if (row.from === 'hW') row.from = null; + if (row.from === 'hW') { + row.from = null; + } } function getSymbol(name: string | null): Symbol { - if (name === null) return rootSymbol; + if (name === null) { + return rootSymbol; + } let symbol = symbolMap.get(name); if (!symbol) { const detail = detailMap.get(name); @@ -160,7 +164,6 @@ export function computeSymbolVectors(symbols: Symbol[]): SymbolVectors { // TODO(misko): This algorithm for computing weights is not perfect because // it only takes the most frequent path into account. // A better approach would be to sum weights along all paths. - // eslint-disable-next-line for-direction for (let i = edgePath.length - 1; 0 <= i; i--) { const edge = edgePath[i]; const symbolIdx = symbolVectorIdxMap.get(edge.from); @@ -171,7 +174,9 @@ export function computeSymbolVectors(symbols: Symbol[]): SymbolVectors { } } - if (alreadyVisited.has(symbol)) return; + if (alreadyVisited.has(symbol)) { + return; + } alreadyVisited.add(symbol); symbol.children.forEach((edge) => { diff --git a/packages/insights/tsconfig.json b/packages/insights/tsconfig.json index 726c12aa614..a5ef0570cba 100644 --- a/packages/insights/tsconfig.json +++ b/packages/insights/tsconfig.json @@ -22,5 +22,5 @@ "@qwik-client-manifest": ["../../qwik/src/server/server-modules.d.ts"] } }, - "exclude": ["./dist"] + "exclude": ["./dist", "eslint.config.mjs"] } diff --git a/packages/qwik-city/src/runtime/src/service-worker/cached-fetch.unit.ts b/packages/qwik-city/src/runtime/src/service-worker/cached-fetch.unit.ts index 5b730f0b1eb..c7f125a9ccc 100644 --- a/packages/qwik-city/src/runtime/src/service-worker/cached-fetch.unit.ts +++ b/packages/qwik-city/src/runtime/src/service-worker/cached-fetch.unit.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-empty-pattern */ import { assert, beforeEach, test } from 'vitest'; import { cachedFetch } from './cached-fetch'; import type { AwaitingRequests, Fetch } from './types'; diff --git a/packages/qwik-labs/.eslintignore b/packages/qwik-labs/.eslintignore deleted file mode 100644 index cf309354540..00000000000 --- a/packages/qwik-labs/.eslintignore +++ /dev/null @@ -1,32 +0,0 @@ -**/*.log -**/.DS_Store -*. -.vscode/settings.json -.history -.yarn -bazel-* -bazel-bin -bazel-out -bazel-qwik -bazel-testlogs -dist -dist-dev -lib -lib-types -vite -etc -external -node_modules -temp -tsc-out -tsdoc-metadata.json -target -output -rollup.config.js -build -.cache -.vscode -.rollup.cache -dist -tsconfig.tsbuildinfo -vite.config.ts diff --git a/packages/qwik-labs/.eslintrc.cjs b/packages/qwik-labs/.eslintrc.cjs deleted file mode 100644 index 5752982cd9a..00000000000 --- a/packages/qwik-labs/.eslintrc.cjs +++ /dev/null @@ -1,40 +0,0 @@ -module.exports = { - root: true, - env: { - browser: true, - es2021: true, - node: true, - }, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:qwik/recommended', - ], - parser: '@typescript-eslint/parser', - parserOptions: { - tsconfigRootDir: __dirname, - project: ['./tsconfig.json', './tsconfig-vite.json'], - ecmaVersion: 2021, - sourceType: 'module', - ecmaFeatures: { - jsx: true, - }, - }, - plugins: ['@typescript-eslint'], - rules: { - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-inferrable-types': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/no-empty-interface': 'off', - '@typescript-eslint/no-namespace': 'off', - '@typescript-eslint/no-empty-function': 'off', - '@typescript-eslint/no-this-alias': 'off', - '@typescript-eslint/ban-types': 'off', - '@typescript-eslint/ban-ts-comment': 'off', - 'prefer-spread': 'off', - 'no-case-declarations': 'off', - 'no-console': 'off', - '@typescript-eslint/no-unused-vars': ['error'], - }, -}; diff --git a/packages/qwik-labs/eslint.config.mjs b/packages/qwik-labs/eslint.config.mjs new file mode 100644 index 00000000000..5929e6c073f --- /dev/null +++ b/packages/qwik-labs/eslint.config.mjs @@ -0,0 +1,86 @@ +import js from '@eslint/js'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; +import { globalIgnores } from 'eslint/config'; +import { qwikEslint9Plugin } from 'eslint-plugin-qwik'; + +const ignores = [ + '**/*.log', + '**/.DS_Store', + '**/*.', + '.vscode/settings.json', + '**/.history', + '**/.yarn', + '**/bazel-*', + '**/bazel-bin', + '**/bazel-out', + '**/bazel-qwik', + '**/bazel-testlogs', + '**/dist', + '**/dist-dev', + '**/lib', + '**/lib-types', + '**/vite', + '**/etc', + '**/external', + '**/node_modules', + '**/temp', + '**/tsc-out', + '**/tsdoc-metadata.json', + '**/target', + '**/output', + '**/rollup.config.js', + '**/build', + '**/.cache', + '**/.vscode', + '**/.rollup.cache', + '**/dist', + '**/tsconfig.tsbuildinfo', + '**/vite.config.ts', + 'eslint.config.mjs', +]; + +export default tseslint.config( + globalIgnores(ignores), + js.configs.recommended, + tseslint.configs.recommended, + qwikEslint9Plugin.configs.recommended, + { + languageOptions: { + globals: { + ...globals.browser, + ...globals.node, + ...globals.es2021, + }, + parserOptions: { + project: ['./tsconfig.json', './tsconfig-vite.json'], + tsconfigRootDir: import.meta.dirname, + ecmaFeatures: { + jsx: true, + }, + }, + }, + }, + { + rules: { + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-inferrable-types': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-empty-interface': 'off', + '@typescript-eslint/no-namespace': 'off', + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/no-this-alias': 'off', + '@typescript-eslint/ban-types': 'off', + '@typescript-eslint/ban-ts-comment': 'off', + 'prefer-spread': 'off', + 'no-case-declarations': 'off', + 'no-console': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-empty-object-type': 'off', + '@typescript-eslint/no-unsafe-function-type': 'off', + '@typescript-eslint/no-unused-expressions': 'off', + curly: 'error', + }, + } +); diff --git a/packages/qwik-labs/package.json b/packages/qwik-labs/package.json index a303bac3504..aa811a1d37c 100644 --- a/packages/qwik-labs/package.json +++ b/packages/qwik-labs/package.json @@ -4,15 +4,15 @@ "version": "0.0.1", "devDependencies": { "@builder.io/qwik": "workspace:^", - "@types/eslint": "8.56.10", + "@eslint/js": "9.22.0", "@types/node": "20.14.11", - "@typescript-eslint/eslint-plugin": "7.16.1", - "@typescript-eslint/parser": "7.16.1", - "eslint": "8.57.0", + "eslint": "9.22.0", "eslint-plugin-qwik": "workspace:^", + "globals": "16.0.0", "np": "10.0.1", "prettier": "3.3.3", "typescript": "5.4.5", + "typescript-eslint": "8.26.1", "undici": "*", "vite": "5.3.5", "zod": "3.22.4" @@ -52,6 +52,7 @@ "fmt": "prettier --write .", "fmt.check": "prettier --check .", "lint": "eslint \"src/**/*.ts*\"", + "lint.fix": "eslint --fix \"src/**/*.ts*\"", "qwik": "qwik", "release": "np", "start": "vite --open --mode ssr", diff --git a/packages/qwik-labs/src/devtools/json.ts b/packages/qwik-labs/src/devtools/json.ts index 85d354fad84..1ec0fd54b86 100644 --- a/packages/qwik-labs/src/devtools/json.ts +++ b/packages/qwik-labs/src/devtools/json.ts @@ -251,7 +251,9 @@ export function qwikJsonDebug( } idx = num; } - while (objs.length < idx) objs.push(null); + while (objs.length < idx) { + objs.push(null); + } let obj: undefined | Base = objs[idx]; if (!obj) { const rawValue = qwikJson.objs[idx]; @@ -399,7 +401,9 @@ export function qwikJsonDebug( } function splitParse(text: string | null, sep: string, fn: (part: string) => any): any[] { - if (!text) return []; + if (!text) { + return []; + } return text.split(sep).map(fn); } diff --git a/packages/qwik-labs/src/insights/index.tsx b/packages/qwik-labs/src/insights/index.tsx index 28f5e0f1751..7ef4a9cf248 100644 --- a/packages/qwik-labs/src/insights/index.tsx +++ b/packages/qwik-labs/src/insights/index.tsx @@ -215,7 +215,9 @@ const insightsPing = sync$(() => }); window[addEventListener_s](error_s, (event: ErrorEvent) => { var error = event[error_s]; - if (!(error && typeof error === 'object')) return; + if (!(error && typeof error === 'object')) { + return; + } var payload = { url: `${location}`, [manifestHash_s]: manifestHash, diff --git a/packages/qwik-react/package.json b/packages/qwik-react/package.json index 1a3658bc456..993d015c721 100644 --- a/packages/qwik-react/package.json +++ b/packages/qwik-react/package.json @@ -59,6 +59,7 @@ "fmt": "prettier --write .", "fmt.check": "prettier --check .", "lint": "eslint \"src/**/*.ts*\"", + "lint.fix": "eslint --fix \"src/**/*.ts*\"", "release": "pnpm run -w build.local && pnpm publish", "start": "npm run dev", "typecheck": "tsc --noEmit" diff --git a/packages/qwik/src/cli/add/print-add-help.ts b/packages/qwik/src/cli/add/print-add-help.ts index 99adbf164d5..343dbc4722b 100644 --- a/packages/qwik/src/cli/add/print-add-help.ts +++ b/packages/qwik/src/cli/add/print-add-help.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import { magenta, dim } from 'kleur/colors'; import { loadIntegrations, sortIntegrationsAndReturnAsClackOptions } from '../utils/integrations'; import { pmRunCmd, note, bye, limitLength } from '../utils/utils'; diff --git a/packages/qwik/src/cli/add/run-add-interactive.ts b/packages/qwik/src/cli/add/run-add-interactive.ts index a8ed1b3becf..087e8f24eca 100644 --- a/packages/qwik/src/cli/add/run-add-interactive.ts +++ b/packages/qwik/src/cli/add/run-add-interactive.ts @@ -4,7 +4,6 @@ import type { IntegrationData, UpdateAppOptions, UpdateAppResult } from '../type import { loadIntegrations, sortIntegrationsAndReturnAsClackOptions } from '../utils/integrations'; import { bye, getPackageManager, note, panic } from '../utils/utils'; -/* eslint-disable no-console */ import { relative } from 'node:path'; import type { AppCommand } from '../utils/app-command'; import { runInPkg } from '../utils/install-deps'; diff --git a/packages/qwik/src/optimizer/src/plugins/eslint-plugin.ts b/packages/qwik/src/optimizer/src/plugins/eslint-plugin.ts index d9ac856fa3d..87c11c50876 100644 --- a/packages/qwik/src/optimizer/src/plugins/eslint-plugin.ts +++ b/packages/qwik/src/optimizer/src/plugins/eslint-plugin.ts @@ -20,23 +20,17 @@ export async function createLinter( if (invalidEslintConfig) { const options: ESLint.Options = { cache: true, - useEslintrc: false, + overrideConfig: { - root: true, - env: { - browser: true, - es2021: true, - node: true, - }, - extends: ['plugin:qwik/recommended'], - parser: '@typescript-eslint/parser', - parserOptions: { - tsconfigRootDir: rootDir, - project: tsconfigFileNames, - ecmaVersion: 2021, - sourceType: 'module', - ecmaFeatures: { - jsx: true, + languageOptions: { + parserOptions: { + tsconfigRootDir: rootDir, + project: tsconfigFileNames, + ecmaVersion: 2021, + sourceType: 'module', + ecmaFeatures: { + jsx: true, + }, }, }, }, diff --git a/packages/qwik/src/optimizer/src/plugins/plugin.ts b/packages/qwik/src/optimizer/src/plugins/plugin.ts index afc1811e8e6..07289038da1 100644 --- a/packages/qwik/src/optimizer/src/plugins/plugin.ts +++ b/packages/qwik/src/optimizer/src/plugins/plugin.ts @@ -811,13 +811,11 @@ export function createQwikPlugin(optimizerOptions: OptimizerOptions = {}) { const debug = (...str: any[]) => { if (opts.debug) { - // eslint-disable-next-line no-console console.debug(`[QWIK PLUGIN: ${id}]`, ...str); } }; const log = (...str: any[]) => { - // eslint-disable-next-line no-console console.log(`[QWIK PLUGIN: ${id}]`, ...str); }; diff --git a/packages/qwik/src/prefetch-service-worker/process-message.ts b/packages/qwik/src/prefetch-service-worker/process-message.ts index 23b530522a7..e4a43ffa9c7 100644 --- a/packages/qwik/src/prefetch-service-worker/process-message.ts +++ b/packages/qwik/src/prefetch-service-worker/process-message.ts @@ -72,10 +72,8 @@ export const processMessage = async (state: SWState, msg: SWMessages) => { } else if (type === 'prefetch-all') { await processPrefetchAll(state, msg[1]); } else if (type === 'ping') { - // eslint-disable-next-line no-console log('ping'); } else if (type === 'verbose') { - // eslint-disable-next-line no-console (state.$log$ = log)('mode: verbose'); } else { console.error('UNKNOWN MESSAGE:', msg); diff --git a/packages/qwik/src/server/platform.ts b/packages/qwik/src/server/platform.ts index a275d3924d4..cd3d7160111 100644 --- a/packages/qwik/src/server/platform.ts +++ b/packages/qwik/src/server/platform.ts @@ -50,7 +50,7 @@ export function createPlatform( if (!modulePath.endsWith('.js')) { modulePath += '.js'; } - const module = require(modulePath); // eslint-disable-line @typescript-eslint/no-var-requires + const module = require(modulePath); if (!(symbolName in module)) { throw new Error(`Q-ERROR: missing symbol '${symbolName}' in module '${modulePath}'.`); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0e4c7331e71..3dc9d7b10d7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,9 +43,9 @@ importers: '@clack/prompts': specifier: 0.7.0 version: 0.7.0 - '@eslint/eslintrc': - specifier: 3.1.0 - version: 3.1.0 + '@eslint/js': + specifier: 9.22.0 + version: 9.22.0 '@mdx-js/mdx': specifier: 3.0.1 version: 3.0.1 @@ -79,9 +79,6 @@ importers: '@types/cross-spawn': specifier: 6.0.6 version: 6.0.6 - '@types/eslint': - specifier: 8.56.10 - version: 8.56.10 '@types/express': specifier: 4.17.21 version: 4.17.21 @@ -106,12 +103,6 @@ importers: '@types/which-pm-runs': specifier: 1.0.2 version: 1.0.2 - '@typescript-eslint/eslint-plugin': - specifier: 7.16.1 - version: 7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': - specifier: 7.16.1 - version: 7.16.1(eslint@8.57.0)(typescript@5.4.5) all-contributors-cli: specifier: 6.26.1 version: 6.26.1 @@ -137,11 +128,11 @@ importers: specifier: 0.20.2 version: 0.20.2 eslint: - specifier: 8.57.0 - version: 8.57.0 + specifier: 9.22.0 + version: 9.22.0(jiti@1.21.0) eslint-plugin-no-only-tests: - specifier: 3.1.0 - version: 3.1.0 + specifier: 3.3.0 + version: 3.3.0 eslint-plugin-qwik: specifier: workspace:^ version: link:packages/eslint-plugin-qwik @@ -151,6 +142,9 @@ importers: express: specifier: 4.20.0 version: 4.20.0 + globals: + specifier: 16.0.0 + version: 16.0.0 install: specifier: 0.13.0 version: 0.13.0 @@ -214,6 +208,9 @@ importers: typescript: specifier: 5.4.5 version: 5.4.5 + typescript-eslint: + specifier: 8.26.1 + version: 8.26.1(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5) undici: specifier: '*' version: 6.6.2 @@ -432,7 +429,7 @@ importers: dependencies: '@typescript-eslint/utils': specifier: ^8.12.2 - version: 8.14.0(eslint@8.57.0)(typescript@5.4.5) + version: 8.14.0(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5) jsx-ast-utils: specifier: ^3.3.5 version: 3.3.5 @@ -443,15 +440,12 @@ importers: '@builder.io/qwik-city': specifier: workspace:^ version: link:../qwik-city - '@types/eslint': - specifier: 9.6.1 - version: 9.6.1 '@types/estree': specifier: 1.0.5 version: 1.0.5 '@typescript-eslint/rule-tester': specifier: 8.14.0 - version: 8.14.0(eslint@8.57.0)(typescript@5.4.5) + version: 8.14.0(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5) redent: specifier: 4.0.0 version: 4.0.0 @@ -495,24 +489,18 @@ importers: '@builder.io/vite-plugin-macro': specifier: 0.0.7 version: 0.0.7(@types/node@20.14.11)(rollup@4.19.0)(terser@5.31.3) + '@eslint/js': + specifier: 9.22.0 + version: 9.22.0 '@netlify/edge-functions': specifier: 2.10.0 version: 2.10.0 '@types/density-clustering': specifier: 1.3.3 version: 1.3.3 - '@types/eslint': - specifier: 8.56.10 - version: 8.56.10 '@types/node': specifier: 20.14.11 version: 20.14.11 - '@typescript-eslint/eslint-plugin': - specifier: 7.16.1 - version: 7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': - specifier: 7.16.1 - version: 7.16.1(eslint@8.57.0)(typescript@5.4.5) autoprefixer: specifier: 10.4.19 version: 10.4.19(postcss@8.4.39) @@ -520,11 +508,14 @@ importers: specifier: 9.6.0 version: 9.6.0 eslint: - specifier: 8.57.0 - version: 8.57.0 + specifier: 9.22.0 + version: 9.22.0(jiti@1.21.0) eslint-plugin-qwik: specifier: workspace:^ version: link:../eslint-plugin-qwik + globals: + specifier: 16.0.0 + version: 16.0.0 netlify-cli: specifier: 17.37.2 version: 17.37.2(@types/express@4.17.21)(@types/node@20.14.11)(bufferutil@4.0.8)(picomatch@3.0.1)(utf-8-validate@5.0.10) @@ -543,6 +534,9 @@ importers: typescript: specifier: 5.4.5 version: 5.4.5 + typescript-eslint: + specifier: 8.26.1 + version: 8.26.1(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5) undici: specifier: '*' version: 6.6.2 @@ -722,24 +716,21 @@ importers: '@builder.io/qwik': specifier: workspace:^ version: link:../qwik - '@types/eslint': - specifier: 8.56.10 - version: 8.56.10 + '@eslint/js': + specifier: 9.22.0 + version: 9.22.0 '@types/node': specifier: 20.14.11 version: 20.14.11 - '@typescript-eslint/eslint-plugin': - specifier: 7.16.1 - version: 7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': - specifier: 7.16.1 - version: 7.16.1(eslint@8.57.0)(typescript@5.4.5) eslint: - specifier: 8.57.0 - version: 8.57.0 + specifier: 9.22.0 + version: 9.22.0(jiti@1.21.0) eslint-plugin-qwik: specifier: workspace:^ version: link:../eslint-plugin-qwik + globals: + specifier: 16.0.0 + version: 16.0.0 np: specifier: 10.0.1 version: 10.0.1(typescript@5.4.5) @@ -749,6 +740,9 @@ importers: typescript: specifier: 5.4.5 version: 5.4.5 + typescript-eslint: + specifier: 8.26.1 + version: 8.26.1(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5) undici: specifier: '*' version: 6.6.2 @@ -1113,6 +1107,7 @@ packages: '@effect/schema@0.66.5': resolution: {integrity: sha512-xfu5161JyrfAS1Ruwv0RXd4QFiCALbm3iu9nlW9N9K+52wbS0WdO6XUekPZ9V/O7LN+XmlIh5Y9xhJaIWCZ/gw==} + deprecated: this package has been merged into the main effect package peerDependencies: effect: ^3.0.3 fast-check: ^3.13.2 @@ -2308,21 +2303,37 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.11.1': - resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-array@0.19.2': + resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.1.0': - resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + '@eslint/config-helpers@0.1.0': + resolution: {integrity: sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@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/core@0.12.0': + resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.0': + resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.22.0': + resolution: {integrity: sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.7': + resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@fastify/accept-negotiator@1.1.0': resolution: {integrity: sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==} @@ -2359,10 +2370,13 @@ packages: '@floating-ui/utils@0.2.4': resolution: {integrity: sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA==} - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} @@ -2372,9 +2386,13 @@ packages: resolution: {integrity: sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==} engines: {node: '>=10.10.0'} - '@humanwhocodes/object-schema@2.0.2': - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} - deprecated: Use @eslint/object-schema instead + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.2': + resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} + engines: {node: '>=18.18'} '@iarna/toml@2.2.5': resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} @@ -3405,18 +3423,15 @@ packages: '@types/density-clustering@1.3.3': resolution: {integrity: sha512-p2zEz57kHxWVg39XZ9QQVW6ity4rC3/1cCeLqm2eqqomvOrf8CFYaw7jO8gdYuchO4532ak0Z0f/vBr9irwG/w==} - '@types/eslint@8.56.10': - resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} - - '@types/eslint@9.6.1': - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} - '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/express-serve-static-core@4.17.43': resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==} @@ -3567,26 +3582,20 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@7.16.1': - resolution: {integrity: sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/eslint-plugin@8.26.1': + resolution: {integrity: sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: 5.4.5 - '@typescript-eslint/parser@7.16.1': - resolution: {integrity: sha512-u+1Qx86jfGQ5i4JjK33/FnawZRpsLxRnKzGE6EABZ40KxVT/vWsiZFEBBHjFOljmmV3MBYOHEKi0Jm9hbAOClA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/parser@8.26.1': + resolution: {integrity: sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + eslint: ^8.57.0 || ^9.0.0 + typescript: 5.4.5 '@typescript-eslint/rule-tester@8.14.0': resolution: {integrity: sha512-q5Gi0CMFLojXZMvdWTIjOcBtV3qUg2xtUJocBxkd6PZ5YfHw9bd/Q+P5vtBu1Mrjs8OhId5WpOaMqjbUXLLBYA==} @@ -3594,36 +3603,33 @@ packages: peerDependencies: eslint: ^8.57.0 || ^9.0.0 - '@typescript-eslint/scope-manager@7.16.1': - resolution: {integrity: sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==} - engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@8.14.0': resolution: {integrity: sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@7.16.1': - resolution: {integrity: sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/scope-manager@8.26.1': + resolution: {integrity: sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.26.1': + resolution: {integrity: sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + eslint: ^8.57.0 || ^9.0.0 + typescript: 5.4.5 '@typescript-eslint/types@5.62.0': resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/types@7.16.1': - resolution: {integrity: sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==} - engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@8.14.0': resolution: {integrity: sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.26.1': + resolution: {integrity: sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@5.62.0': resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3633,15 +3639,6 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@7.16.1': - resolution: {integrity: sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@typescript-eslint/typescript-estree@8.14.0': resolution: {integrity: sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3651,11 +3648,11 @@ packages: typescript: optional: true - '@typescript-eslint/utils@7.16.1': - resolution: {integrity: sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/typescript-estree@8.26.1': + resolution: {integrity: sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + typescript: 5.4.5 '@typescript-eslint/utils@8.14.0': resolution: {integrity: sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==} @@ -3663,18 +3660,25 @@ packages: peerDependencies: eslint: ^8.57.0 || ^9.0.0 + '@typescript-eslint/utils@8.26.1': + resolution: {integrity: sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: 5.4.5 + '@typescript-eslint/visitor-keys@5.62.0': resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/visitor-keys@7.16.1': - resolution: {integrity: sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==} - engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@8.14.0': resolution: {integrity: sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.26.1': + resolution: {integrity: sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript/analyze-trace@0.10.1': resolution: {integrity: sha512-RnlSOPh14QbopGCApgkSx5UBgGda5MX1cHqp2fsqfiDyCwGL/m1jaeB9fzu7didVS81LQqGZZuxFBcg8YU8EVw==} hasBin: true @@ -3801,6 +3805,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -4638,6 +4647,10 @@ packages: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + crossws@0.1.1: resolution: {integrity: sha512-c9c/o7bS3OjsdpSkvexpka0JNlesBF2JU9B2V1yNsYGwRbAafxhJQ7VI9b48D5bpONz/oxbPGMzBojy9sXoQIQ==} @@ -4922,10 +4935,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'} - dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} @@ -5382,40 +5391,40 @@ packages: engines: {node: '>=6.0'} hasBin: true - eslint-plugin-no-only-tests@3.1.0: - resolution: {integrity: sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==} + eslint-plugin-no-only-tests@3.3.0: + resolution: {integrity: sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==} engines: {node: '>=5.0.0'} - 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.3.0: + resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 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} - eslint-visitor-keys@4.1.0: - resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==} + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + eslint@9.22.0: + resolution: {integrity: sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true esniff@2.0.1: resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} engines: {node: '>=0.10'} - espree@10.2.0: - resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==} + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -5664,9 +5673,9 @@ packages: resolution: {integrity: sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==} engines: {node: '>=14'} - 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'} file-type@18.7.0: resolution: {integrity: sha512-ihHtXRzXEziMrQ56VSgU7wkxh55iNchFkosu7Y9/S+tXHdKyrGjVK0ujbqNnsxzea+78MaLhN6PGmfYSAv1ACw==} @@ -5733,9 +5742,9 @@ packages: find-yarn-workspace-root2@1.2.16: resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} - 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'} flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} @@ -5965,14 +5974,14 @@ packages: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} engines: {node: '>=18'} - 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'} + globals@16.0.0: + resolution: {integrity: sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==} + engines: {node: '>=18'} + globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -6462,10 +6471,6 @@ packages: resolution: {integrity: sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - is-path-inside@4.0.0: resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} engines: {node: '>=12'} @@ -9096,9 +9101,6 @@ packages: text-hex@1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -9233,6 +9235,12 @@ packages: peerDependencies: typescript: 5.4.5 + ts-api-utils@2.0.1: + resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: 5.4.5 + ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -9295,10 +9303,6 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -9352,6 +9356,13 @@ packages: typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + typescript-eslint@8.26.1: + resolution: {integrity: sha512-t/oIs9mYyrwZGRpDv3g+3K6nZ5uhKEMt2oNmAPwaY4/ye0+EH4nXIPYNtkYFS6QHm+1DFg34DbglYBz5P9Xysg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: 5.4.5 + typescript@5.4.5: resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} @@ -9904,6 +9915,7 @@ packages: yaeti@0.0.6: resolution: {integrity: sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==} engines: {node: '>=0.10.32'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. yallist@2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} @@ -11079,32 +11091,32 @@ snapshots: '@esbuild/win32-x64@0.23.1': optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@8.57.0)': + '@eslint-community/eslint-utils@4.4.1(eslint@9.22.0(jiti@1.21.0))': dependencies: - eslint: 8.57.0 + eslint: 9.22.0(jiti@1.21.0) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.11.1': {} + '@eslint-community/regexpp@4.12.1': {} - '@eslint/eslintrc@2.1.4': + '@eslint/config-array@0.19.2': dependencies: - ajv: 6.12.6 + '@eslint/object-schema': 2.1.6 debug: 4.3.7(supports-color@9.4.0) - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 minimatch: 3.1.2 - strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/eslintrc@3.1.0': + '@eslint/config-helpers@0.1.0': {} + + '@eslint/core@0.12.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.0': dependencies: ajv: 6.12.6 debug: 4.3.7(supports-color@9.4.0) - espree: 10.2.0 + espree: 10.3.0 globals: 14.0.0 ignore: 5.3.1 import-fresh: 3.3.0 @@ -11114,7 +11126,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.0': {} + '@eslint/js@9.22.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.2.7': + dependencies: + '@eslint/core': 0.12.0 + levn: 0.4.1 '@fastify/accept-negotiator@1.1.0': {} @@ -11164,19 +11183,20 @@ snapshots: '@floating-ui/utils@0.2.4': {} - '@humanwhocodes/config-array@0.11.14': + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': dependencies: - '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.7(supports-color@9.4.0) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 '@humanwhocodes/module-importer@1.0.1': {} '@humanwhocodes/momoa@2.0.4': {} - '@humanwhocodes/object-schema@2.0.2': {} + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.2': {} '@iarna/toml@2.2.5': {} @@ -12428,22 +12448,14 @@ snapshots: '@types/density-clustering@1.3.3': {} - '@types/eslint@8.56.10': - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 - - '@types/eslint@9.6.1': - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 - '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.5 '@types/estree@1.0.5': {} + '@types/estree@1.0.6': {} + '@types/express-serve-static-core@4.17.43': dependencies: '@types/node': 20.14.11 @@ -12606,43 +12618,41 @@ snapshots: '@types/node': 20.14.11 optional: true - '@typescript-eslint/eslint-plugin@7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5))(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5)': dependencies: - '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 7.16.1(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 7.16.1 - '@typescript-eslint/type-utils': 7.16.1(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.16.1(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.16.1 - eslint: 8.57.0 + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5) + '@typescript-eslint/scope-manager': 8.26.1 + '@typescript-eslint/type-utils': 8.26.1(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5) + '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.26.1 + eslint: 9.22.0(jiti@1.21.0) graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - ts-api-utils: 1.4.0(typescript@5.4.5) - optionalDependencies: + ts-api-utils: 2.0.1(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 7.16.1 - '@typescript-eslint/types': 7.16.1 - '@typescript-eslint/typescript-estree': 7.16.1(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.16.1 + '@typescript-eslint/scope-manager': 8.26.1 + '@typescript-eslint/types': 8.26.1 + '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.26.1 debug: 4.3.7(supports-color@9.4.0) - eslint: 8.57.0 - optionalDependencies: + eslint: 9.22.0(jiti@1.21.0) typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/rule-tester@8.14.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/rule-tester@8.14.0(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5)': dependencies: '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.4.5) - '@typescript-eslint/utils': 8.14.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 8.14.0(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5) ajv: 6.12.6 - eslint: 8.57.0 + eslint: 9.22.0(jiti@1.21.0) json-stable-stringify-without-jsonify: 1.0.1 lodash.merge: 4.6.2 semver: 7.6.3 @@ -12650,34 +12660,33 @@ snapshots: - supports-color - typescript - '@typescript-eslint/scope-manager@7.16.1': - dependencies: - '@typescript-eslint/types': 7.16.1 - '@typescript-eslint/visitor-keys': 7.16.1 - '@typescript-eslint/scope-manager@8.14.0': dependencies: '@typescript-eslint/types': 8.14.0 '@typescript-eslint/visitor-keys': 8.14.0 - '@typescript-eslint/type-utils@7.16.1(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/scope-manager@8.26.1': + dependencies: + '@typescript-eslint/types': 8.26.1 + '@typescript-eslint/visitor-keys': 8.26.1 + + '@typescript-eslint/type-utils@8.26.1(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5)': dependencies: - '@typescript-eslint/typescript-estree': 7.16.1(typescript@5.4.5) - '@typescript-eslint/utils': 7.16.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.4.5) + '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5) debug: 4.3.7(supports-color@9.4.0) - eslint: 8.57.0 - ts-api-utils: 1.4.0(typescript@5.4.5) - optionalDependencies: + eslint: 9.22.0(jiti@1.21.0) + ts-api-utils: 2.0.1(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - supports-color '@typescript-eslint/types@5.62.0': {} - '@typescript-eslint/types@7.16.1': {} - '@typescript-eslint/types@8.14.0': {} + '@typescript-eslint/types@8.26.1': {} + '@typescript-eslint/typescript-estree@5.62.0(supports-color@9.4.0)(typescript@5.4.5)': dependencies: '@typescript-eslint/types': 5.62.0 @@ -12692,12 +12701,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.16.1(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@8.14.0(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 7.16.1 - '@typescript-eslint/visitor-keys': 7.16.1 + '@typescript-eslint/types': 8.14.0 + '@typescript-eslint/visitor-keys': 8.14.0 debug: 4.3.7(supports-color@9.4.0) - globby: 11.1.0 + fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 @@ -12707,58 +12716,57 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.14.0(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@8.26.1(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 8.14.0 - '@typescript-eslint/visitor-keys': 8.14.0 + '@typescript-eslint/types': 8.26.1 + '@typescript-eslint/visitor-keys': 8.26.1 debug: 4.3.7(supports-color@9.4.0) fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.4.0(typescript@5.4.5) - optionalDependencies: + ts-api-utils: 2.0.1(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.16.1(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/utils@8.14.0(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.0) - '@typescript-eslint/scope-manager': 7.16.1 - '@typescript-eslint/types': 7.16.1 - '@typescript-eslint/typescript-estree': 7.16.1(typescript@5.4.5) - eslint: 8.57.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.22.0(jiti@1.21.0)) + '@typescript-eslint/scope-manager': 8.14.0 + '@typescript-eslint/types': 8.14.0 + '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.4.5) + eslint: 9.22.0(jiti@1.21.0) transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@8.14.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/utils@8.26.1(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.0) - '@typescript-eslint/scope-manager': 8.14.0 - '@typescript-eslint/types': 8.14.0 - '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.4.5) - eslint: 8.57.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.22.0(jiti@1.21.0)) + '@typescript-eslint/scope-manager': 8.26.1 + '@typescript-eslint/types': 8.26.1 + '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.4.5) + eslint: 9.22.0(jiti@1.21.0) + typescript: 5.4.5 transitivePeerDependencies: - supports-color - - typescript '@typescript-eslint/visitor-keys@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@7.16.1': - dependencies: - '@typescript-eslint/types': 7.16.1 - eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.14.0': dependencies: '@typescript-eslint/types': 8.14.0 eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@8.26.1': + dependencies: + '@typescript-eslint/types': 8.26.1 + eslint-visitor-keys: 4.2.0 + '@typescript/analyze-trace@0.10.1': dependencies: chalk: 4.1.2 @@ -12784,8 +12792,8 @@ snapshots: dependencies: '@mapbox/node-pre-gyp': 1.0.11(supports-color@9.4.0) '@rollup/pluginutils': 4.2.1 - acorn: 8.12.1 - acorn-import-attributes: 1.9.5(acorn@8.12.1) + acorn: 8.14.1 + acorn-import-attributes: 1.9.5(acorn@8.14.1) async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 @@ -12939,18 +12947,24 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-import-attributes@1.9.5(acorn@8.12.1): + acorn-import-attributes@1.9.5(acorn@8.14.1): dependencies: - acorn: 8.12.1 + acorn: 8.14.1 acorn-jsx@5.3.2(acorn@8.12.1): dependencies: acorn: 8.12.1 + acorn-jsx@5.3.2(acorn@8.14.1): + dependencies: + acorn: 8.14.1 + acorn-walk@8.3.2: {} acorn@8.12.1: {} + acorn@8.14.1: {} + agent-base@6.0.2(supports-color@9.4.0): dependencies: debug: 4.3.7(supports-color@9.4.0) @@ -13871,6 +13885,12 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + crossws@0.1.1: {} crypto-random-string@4.0.0: @@ -14123,10 +14143,6 @@ snapshots: dlv@1.1.3: {} - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - dom-helpers@5.2.1: dependencies: '@babel/runtime': 7.23.9 @@ -14661,57 +14677,56 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-plugin-no-only-tests@3.1.0: {} + eslint-plugin-no-only-tests@3.3.0: {} - eslint-scope@7.2.2: + eslint-scope@8.3.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.1.0: {} + eslint-visitor-keys@4.2.0: {} - eslint@8.57.0: + eslint@9.22.0(jiti@1.21.0): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.0) - '@eslint-community/regexpp': 4.11.1 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.22.0(jiti@1.21.0)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.2 + '@eslint/config-helpers': 0.1.0 + '@eslint/core': 0.12.0 + '@eslint/eslintrc': 3.3.0 + '@eslint/js': 9.22.0 + '@eslint/plugin-kit': 0.2.7 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 + '@humanwhocodes/retry': 0.4.2 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 debug: 4.3.7(supports-color@9.4.0) - 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.3.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 esquery: 1.6.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 minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 + optionalDependencies: + jiti: 1.21.0 transitivePeerDependencies: - supports-color @@ -14722,17 +14737,11 @@ snapshots: event-emitter: 0.3.5 type: 2.7.2 - espree@10.2.0: + espree@10.3.0: dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) - eslint-visitor-keys: 4.1.0 - - espree@9.6.1: - dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) - eslint-visitor-keys: 3.4.3 + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) + eslint-visitor-keys: 4.2.0 esprima@4.0.1: {} @@ -15085,9 +15094,9 @@ snapshots: escape-string-regexp: 5.0.0 is-unicode-supported: 1.3.0 - file-entry-cache@6.0.1: + file-entry-cache@8.0.0: dependencies: - flat-cache: 3.2.0 + flat-cache: 4.0.1 file-type@18.7.0: dependencies: @@ -15173,11 +15182,10 @@ snapshots: micromatch: 4.0.5 pkg-dir: 4.2.0 - flat-cache@3.2.0: + flat-cache@4.0.1: dependencies: flatted: 3.3.1 keyv: 4.5.4 - rimraf: 3.0.2 flatted@3.3.1: {} @@ -15416,12 +15424,10 @@ snapshots: dependencies: ini: 4.1.1 - globals@13.24.0: - dependencies: - type-fest: 0.20.2 - globals@14.0.0: {} + globals@16.0.0: {} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -16030,8 +16036,6 @@ snapshots: is-path-cwd@3.0.0: {} - is-path-inside@3.0.3: {} - is-path-inside@4.0.0: {} is-plain-obj@1.1.0: {} @@ -17144,7 +17148,7 @@ snapshots: mlly@1.6.1: dependencies: - acorn: 8.12.1 + acorn: 8.14.1 pathe: 1.1.2 pkg-types: 1.0.3 ufo: 1.5.4 @@ -19273,8 +19277,6 @@ snapshots: text-hex@1.0.0: {} - text-table@0.2.0: {} - thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -19377,6 +19379,10 @@ snapshots: dependencies: typescript: 5.4.5 + ts-api-utils@2.0.1(typescript@5.4.5): + dependencies: + typescript: 5.4.5 + ts-interface-checker@0.1.13: {} ts-morph@23.0.0: @@ -19392,7 +19398,7 @@ snapshots: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 20.14.11 - acorn: 8.12.1 + acorn: 8.14.1 acorn-walk: 8.3.2 arg: 4.1.3 create-require: 1.1.1 @@ -19436,8 +19442,6 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-fest@0.20.2: {} - type-fest@0.21.3: {} type-fest@0.8.1: {} @@ -19495,6 +19499,16 @@ snapshots: dependencies: is-typedarray: 1.0.0 + typescript-eslint@8.26.1(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5): + dependencies: + '@typescript-eslint/eslint-plugin': 8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5))(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5) + '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5) + '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@1.21.0))(typescript@5.4.5) + eslint: 9.22.0(jiti@1.21.0) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + typescript@5.4.5: {} ufo@1.5.4: {} diff --git a/scripts/create-qwik-cli.ts b/scripts/create-qwik-cli.ts index 367a7dcce33..9362914c68c 100644 --- a/scripts/create-qwik-cli.ts +++ b/scripts/create-qwik-cli.ts @@ -213,11 +213,11 @@ async function updatePackageJson(config: BuildConfig, destDir: string) { pkgJson.devDependencies['eslint-plugin-qwik'] = qwikVersion; } - setVersionFromRoot('@types/eslint'); setVersionFromRoot('@types/node'); - setVersionFromRoot('@typescript-eslint/eslint-plugin'); - setVersionFromRoot('@typescript-eslint/parser'); + setVersionFromRoot('typescript-eslint'); + setVersionFromRoot('globals'); setVersionFromRoot('eslint'); + setVersionFromRoot('eslint/js'); setVersionFromRoot('prettier'); setVersionFromRoot('typescript'); setVersionFromRoot('node-fetch'); diff --git a/scripts/validate-cli.ts b/scripts/validate-cli.ts index 29a7f0851de..39b663ef63b 100644 --- a/scripts/validate-cli.ts +++ b/scripts/validate-cli.ts @@ -88,6 +88,7 @@ async function validateStarter( appPkgJson.devDependencies['@builder.io/qwik'] = 'latest'; appPkgJson.devDependencies['@builder.io/qwik-city'] = 'latest'; appPkgJson.devDependencies['eslint-plugin-qwik'] = 'latest'; + appPkgJson.devDependencies['eslint'] = 'latest'; writeFileSync(appPkgJsonPath, JSON.stringify(appPkgJson, null, 2)); const tsconfigPath = join(result.outDir, 'tsconfig.json'); diff --git a/starters/apps/base/.eslintignore b/starters/apps/base/.eslintignore deleted file mode 100644 index 1acecc10a06..00000000000 --- a/starters/apps/base/.eslintignore +++ /dev/null @@ -1,38 +0,0 @@ -**/*.log -**/.DS_Store -*. -.vscode/settings.json -.history -.yarn -bazel-* -bazel-bin -bazel-out -bazel-qwik -bazel-testlogs -dist -dist-dev -lib -lib-types -etc -external -node_modules -temp -tsc-out -tsdoc-metadata.json -target -output -rollup.config.js -build -.cache -.vscode -.rollup.cache -dist -tsconfig.tsbuildinfo -vite.config.ts -*.spec.tsx -*.spec.ts -.netlify -pnpm-lock.yaml -package-lock.json -yarn.lock -server diff --git a/starters/apps/base/.eslintrc.cjs b/starters/apps/base/.eslintrc.cjs deleted file mode 100644 index 70dc5d0392a..00000000000 --- a/starters/apps/base/.eslintrc.cjs +++ /dev/null @@ -1,42 +0,0 @@ -module.exports = { - root: true, - env: { - browser: true, - es2021: true, - node: true, - }, - extends: [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:qwik/recommended", - ], - parser: "@typescript-eslint/parser", - parserOptions: { - tsconfigRootDir: __dirname, - project: ["./tsconfig.json"], - ecmaVersion: 2021, - sourceType: "module", - ecmaFeatures: { - jsx: true, - }, - }, - plugins: ["@typescript-eslint"], - rules: { - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/no-inferrable-types": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-empty-interface": "off", - "@typescript-eslint/no-namespace": "off", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-this-alias": "off", - "@typescript-eslint/ban-types": "off", - "@typescript-eslint/ban-ts-comment": "off", - "prefer-spread": "off", - "no-case-declarations": "off", - "no-console": "off", - "@typescript-eslint/no-unused-vars": ["error"], - "@typescript-eslint/consistent-type-imports": "warn", - "@typescript-eslint/no-unnecessary-condition": "warn", - }, -}; diff --git a/starters/apps/base/eslint.config.js b/starters/apps/base/eslint.config.js new file mode 100644 index 00000000000..3eb116fbdfd --- /dev/null +++ b/starters/apps/base/eslint.config.js @@ -0,0 +1,73 @@ +import js from '@eslint/js'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; +import { globalIgnores } from 'eslint/config'; +import { qwikEslint9Plugin } from 'eslint-plugin-qwik'; + +const ignores = [ + "**/*.log", + "**/.DS_Store", + "**/*.", + ".vscode/settings.json", + "**/.history", + "**/.yarn", + "**/bazel-*", + "**/bazel-bin", + "**/bazel-out", + "**/bazel-qwik", + "**/bazel-testlogs", + "**/dist", + "**/dist-dev", + "**/lib", + "**/lib-types", + "**/etc", + "**/external", + "**/node_modules", + "**/temp", + "**/tsc-out", + "**/tsdoc-metadata.json", + "**/target", + "**/output", + "**/rollup.config.js", + "**/build", + "**/.cache", + "**/.vscode", + "**/.rollup.cache", + "**/dist", + "**/tsconfig.tsbuildinfo", + "**/vite.config.ts", + "**/*.spec.tsx", + "**/*.spec.ts", + "**/.netlify", + "**/pnpm-lock.yaml", + "**/package-lock.json", + "**/yarn.lock", + "**/server", + "eslint.config.js", +]; + +export default tseslint.config( + globalIgnores(ignores), + js.configs.recommended, + tseslint.configs.recommended, + qwikEslint9Plugin.configs.recommended, + { + languageOptions: { + globals: { + ...globals.browser, + ...globals.node, + ...globals.es2021, + ...globals.serviceworker, + }, + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname, + }, + }, + }, + { + rules: { + "@typescript-eslint/no-explicit-any": "off", + }, + } +); diff --git a/starters/apps/base/package.json b/starters/apps/base/package.json index 3bafa473d56..c464aadc3f0 100644 --- a/starters/apps/base/package.json +++ b/starters/apps/base/package.json @@ -18,10 +18,9 @@ "devDependencies": { "@builder.io/qwik": "latest", "@builder.io/qwik-city": "latest", - "@types/eslint": "latest", + "@eslint/js": "latest", "@types/node": "latest", - "@typescript-eslint/eslint-plugin": "latest", - "@typescript-eslint/parser": "latest", + "typescript-eslint": "latest", "eslint": "latest", "eslint-plugin-qwik": "latest", "prettier": "latest", diff --git a/starters/apps/base/tsconfig.json b/starters/apps/base/tsconfig.json index 639f88e85ae..2a2bc9fcce5 100644 --- a/starters/apps/base/tsconfig.json +++ b/starters/apps/base/tsconfig.json @@ -20,6 +20,5 @@ "~/*": ["./src/*"] } }, - "files": ["./.eslintrc.cjs"], "include": ["src", "./*.d.ts", "./*.config.ts"] } diff --git a/starters/apps/e2e/src/components/resource/resource-fn.tsx b/starters/apps/e2e/src/components/resource/resource-fn.tsx index 85dd4742ed7..4ca32f1d7a6 100644 --- a/starters/apps/e2e/src/components/resource/resource-fn.tsx +++ b/starters/apps/e2e/src/components/resource/resource-fn.tsx @@ -1,4 +1,3 @@ -/* eslint-disable */ import { component$, useResource$, diff --git a/starters/apps/e2e/src/components/resource/resource.tsx b/starters/apps/e2e/src/components/resource/resource.tsx index ae3b9e90097..912e2cc6534 100644 --- a/starters/apps/e2e/src/components/resource/resource.tsx +++ b/starters/apps/e2e/src/components/resource/resource.tsx @@ -1,4 +1,3 @@ -/* eslint-disable */ import { component$, useStore, diff --git a/starters/apps/library/.eslintignore b/starters/apps/library/.eslintignore deleted file mode 100644 index 039dbd26a06..00000000000 --- a/starters/apps/library/.eslintignore +++ /dev/null @@ -1,31 +0,0 @@ -**/*.log -**/.DS_Store -*. -.vscode/settings.json -.history -.yarn -bazel-* -bazel-bin -bazel-out -bazel-qwik -bazel-testlogs -dist -dist-dev -lib -lib-types -etc -external -node_modules -temp -tsc-out -tsdoc-metadata.json -target -output -rollup.config.js -build -.cache -.vscode -.rollup.cache -dist -tsconfig.tsbuildinfo -vite.config.ts diff --git a/starters/apps/library/.eslintrc.cjs b/starters/apps/library/.eslintrc.cjs deleted file mode 100644 index 32abdc809f2..00000000000 --- a/starters/apps/library/.eslintrc.cjs +++ /dev/null @@ -1,40 +0,0 @@ -module.exports = { - root: true, - env: { - browser: true, - es2021: true, - node: true, - }, - extends: [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:qwik/recommended", - ], - parser: "@typescript-eslint/parser", - parserOptions: { - tsconfigRootDir: __dirname, - project: ["./tsconfig.json"], - ecmaVersion: 2021, - sourceType: "module", - ecmaFeatures: { - jsx: true, - }, - }, - plugins: ["@typescript-eslint"], - rules: { - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/no-inferrable-types": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-empty-interface": "off", - "@typescript-eslint/no-namespace": "off", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-this-alias": "off", - "@typescript-eslint/ban-types": "off", - "@typescript-eslint/ban-ts-comment": "off", - "prefer-spread": "off", - "no-case-declarations": "off", - "no-console": "off", - "@typescript-eslint/no-unused-vars": ["error"], - }, -}; diff --git a/starters/apps/library/eslint.config.js b/starters/apps/library/eslint.config.js new file mode 100644 index 00000000000..ecfed533d93 --- /dev/null +++ b/starters/apps/library/eslint.config.js @@ -0,0 +1,68 @@ +import js from '@eslint/js'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; +import { globalIgnores } from 'eslint/config'; +import { qwikEslint9Plugin } from 'eslint-plugin-qwik'; + +const ignores = [ + "**/*.log", + "**/.DS_Store", + "**/*.", + ".vscode/settings.json", + "**/.history", + "**/.yarn", + "**/bazel-*", + "**/bazel-bin", + "**/bazel-out", + "**/bazel-qwik", + "**/bazel-testlogs", + "**/dist", + "**/dist-dev", + "**/lib", + "**/lib-types", + "**/etc", + "**/external", + "**/node_modules", + "**/temp", + "**/tsc-out", + "**/tsdoc-metadata.json", + "**/target", + "**/output", + "**/rollup.config.js", + "**/build", + "**/.cache", + "**/.vscode", + "**/.rollup.cache", + "**/dist", + "**/tsconfig.tsbuildinfo", + "**/vite.config.ts", + "**/*.spec.tsx", + "**/*.spec.ts", + "**/.netlify", + "**/pnpm-lock.yaml", + "**/package-lock.json", + "**/yarn.lock", + "**/server", + "eslint.config.js", +]; + +export default tseslint.config( + globalIgnores(ignores), + js.configs.recommended, + tseslint.configs.recommended, + qwikEslint9Plugin.configs.recommended, + { + languageOptions: { + globals: { + ...globals.browser, + ...globals.node, + ...globals.es2021, + ...globals.serviceworker, + }, + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname, + }, + }, + }, +); diff --git a/starters/apps/library/package.json b/starters/apps/library/package.json index ed7ab48d57b..10d36fd32d1 100644 --- a/starters/apps/library/package.json +++ b/starters/apps/library/package.json @@ -34,10 +34,9 @@ }, "devDependencies": { "@builder.io/qwik": "latest", - "@types/eslint": "latest", + "@eslint/js": "latest", "@types/node": "latest", - "@typescript-eslint/eslint-plugin": "latest", - "@typescript-eslint/parser": "latest", + "typescript-eslint": "latest", "eslint": "latest", "eslint-plugin-qwik": "latest", "np": "^8.0.4", diff --git a/starters/apps/playground/src/routes/demo/flower/index.tsx b/starters/apps/playground/src/routes/demo/flower/index.tsx index 28734a47402..a7ad31a1bee 100644 --- a/starters/apps/playground/src/routes/demo/flower/index.tsx +++ b/starters/apps/playground/src/routes/demo/flower/index.tsx @@ -16,6 +16,7 @@ export default component$(() => { number: 20, }); + // eslint-disable-next-line qwik/no-use-visible-task useVisibleTask$(({ cleanup }) => { const timeout = setTimeout(() => (state.count = 1), 500); cleanup(() => clearTimeout(timeout)); diff --git a/starters/features/localize/src/routes/[locale]/i18n-utils.ts b/starters/features/localize/src/routes/[locale]/i18n-utils.ts index 33dce901801..198ddc5d604 100644 --- a/starters/features/localize/src/routes/[locale]/i18n-utils.ts +++ b/starters/features/localize/src/routes/[locale]/i18n-utils.ts @@ -83,7 +83,7 @@ export function extractBase({ serverData }: RenderOptions): string { export function useI18n() { if (import.meta.env.DEV) { // During development only, load all translations in memory when the app starts on the client. - // eslint-disable-next-line + useOnDocument("qinit", $(initTranslations)); } }