diff --git a/.changeset/breezy-toes-help.md b/.changeset/breezy-toes-help.md new file mode 100644 index 00000000000..4dcc47d055c --- /dev/null +++ b/.changeset/breezy-toes-help.md @@ -0,0 +1,5 @@ +--- +'eslint-plugin-qwik': major +--- + +let eslint-plugin-qwik support Eslint 9 and 8 simultaneously 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/e2e/qwik-cli-e2e/utils/index.ts b/e2e/qwik-cli-e2e/utils/index.ts index c67a7636897..cabbfa3cc6d 100644 --- a/e2e/qwik-cli-e2e/utils/index.ts +++ b/e2e/qwik-cli-e2e/utils/index.ts @@ -67,7 +67,7 @@ function replacePackagesWithLocalOnes(tmpDir: string) { for (const { name, absolutePath } of tarballConfig) { patchPackageJsonForPlugin(tmpDir, name, absolutePath); } - execSync('npm i', { + execSync('pnpm i', { cwd: tmpDir, // only output errors stdio: ['ignore', 'ignore', 'inherit'], diff --git a/packages/insights/.eslintrc.cjs b/eslint.config.mjs similarity index 51% rename from packages/insights/.eslintrc.cjs rename to eslint.config.mjs index 03a22c7348e..8cac28ea74d 100644 --- a/packages/insights/.eslintrc.cjs +++ b/eslint.config.mjs @@ -1,26 +1,29 @@ -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, +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; +import { fileURLToPath } from 'url'; +import { dirname } from 'path'; +import typescript from '@typescript-eslint/eslint-plugin'; +const __dirname = dirname(fileURLToPath(import.meta.url)); +import globals from 'globals'; + +export default tseslint.config(eslint.configs.recommended, tseslint.configs.recommended, { + languageOptions: { + parserOptions: { + sourceType: 'module', + ecmaFeatures: { + jsx: true, + }, + globals: { + ...globals.node, + ...globals.es2021, + ...globals.browser, + }, + ecmaVersion: 2021, + project: ['./tsconfig.json'], + tsconfigRootDir: __dirname, }, }, - plugins: ['@typescript-eslint'], + plugins: { '@typescript-eslint': typescript }, rules: { '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/explicit-module-boundary-types': 'off', @@ -39,4 +42,4 @@ module.exports = { '@typescript-eslint/consistent-type-imports': 'warn', '@typescript-eslint/no-unnecessary-condition': 'warn', }, -}; +}); diff --git a/package.json b/package.json index acaa9ad1c06..963140e4a9c 100644 --- a/package.json +++ b/package.json @@ -114,7 +114,7 @@ "@types/brotli": "1.3.4", "@types/bun": "1.1.6", "@types/cross-spawn": "6.0.6", - "@types/eslint": "8.56.10", + "@types/eslint": "9.6.1", "@types/express": "4.17.21", "@types/node": "20.14.11", "@types/path-browserify": "1.0.2", @@ -123,8 +123,9 @@ "@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", + "@typescript-eslint/eslint-plugin": "8.18.0", + "typescript-eslint": "8.18.0", + "globals": "15.13.0", "all-contributors-cli": "6.26.1", "brotli": "1.3.3", "concurrently": "8.2.2", @@ -133,7 +134,7 @@ "csstype": "3.1.3", "dotenv": "16.4.5", "esbuild": "0.20.2", - "eslint": "8.57.0", + "eslint": "9.16.0", "eslint-plugin-no-only-tests": "3.1.0", "eslint-plugin-qwik": "workspace:^", "execa": "8.0.1", @@ -242,10 +243,10 @@ "start": "concurrently \"npm:build.watch\" \"npm:tsc.watch\" -n build,tsc -c green,cyan", "test": "pnpm build.full && pnpm test.unit && pnpm test.e2e", "test.e2e": "pnpm test.e2e.chromium && pnpm test.e2e.webkit", - "test.e2e.cli": "pnpm --filter qwik-cli-e2e e2e", "test.e2e.chromium": "playwright test starters --browser=chromium --config starters/playwright.config.ts", "test.e2e.chromium.debug": "PWDEBUG=1 playwright test starters --browser=chromium --config starters/playwright.config.ts", "test.e2e.city": "playwright test starters/e2e/qwikcity --browser=chromium --config starters/playwright.config.ts", + "test.e2e.cli": "pnpm --filter qwik-cli-e2e e2e", "test.e2e.firefox": "playwright test starters --browser=firefox --config starters/playwright.config.ts", "test.e2e.webkit": "playwright test starters --browser=webkit --config starters/playwright.config.ts", "test.rust": "make test", 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/eslint.config.mjs b/packages/docs/src/routes/demo/eslint.config.mjs new file mode 100644 index 00000000000..b58d5376689 --- /dev/null +++ b/packages/docs/src/routes/demo/eslint.config.mjs @@ -0,0 +1,51 @@ +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; +import { fileURLToPath } from 'url'; +import { dirname } from 'path'; +import typescript from '@typescript-eslint/eslint-plugin'; +const __dirname = dirname(fileURLToPath(import.meta.url)); +import globals from 'globals'; + +export default tseslint.config( + eslint.configs.recommended, + tseslint.configs.recommended, + { + languageOptions: { + parserOptions: { + sourceType: 'module', + ecmaFeatures: { + jsx: true, + }, + globals: { + ...globals.node, + ...globals.es2021, + ...globals.browser, + }, + ecmaVersion: 2021, + project: ['./tsconfig.json'], + tsconfigRootDir: __dirname, + }, + }, + plugins: { + '@typescript-eslint': typescript, + }, + 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/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/eslint.config.mjs b/packages/docs/src/routes/demo/state/no-serialize/eslint.config.mjs new file mode 100644 index 00000000000..bb3c1d7f39c --- /dev/null +++ b/packages/docs/src/routes/demo/state/no-serialize/eslint.config.mjs @@ -0,0 +1,54 @@ +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; +import { fileURLToPath } from 'url'; +import { dirname } from 'path'; +import typescript from '@typescript-eslint/eslint-plugin'; +import qwik from 'eslint-plugin-qwik'; +const __dirname = dirname(fileURLToPath(import.meta.url)); +import globals from 'globals'; + +export default tseslint.config( + eslint.configs.recommended, + tseslint.configs.recommended, + qwik.configs.recommended, + { + languageOptions: { + parserOptions: { + sourceType: 'module', + ecmaFeatures: { + jsx: true, + }, + globals: { + ...globals.node, + ...globals.es2021, + ...globals.browser, + }, + ecmaVersion: 2021, + project: ['../../tsconfig.json'], + tsconfigRootDir: __dirname, + }, + }, + plugins: { + '@typescript-eslint': typescript, + }, + 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/eslint-plugin-qwik/index.ts b/packages/eslint-plugin-qwik/index.ts index 158da4a1315..453d03f2685 100644 --- a/packages/eslint-plugin-qwik/index.ts +++ b/packages/eslint-plugin-qwik/index.ts @@ -9,8 +9,9 @@ import { preferClasslist } from './src/preferClasslist'; import { unusedServer } from './src/unusedServer'; import { useMethodUsage } from './src/useMethodUsage'; import { validLexicalScope } from './src/validLexicalScope'; +import pkg from './package.json'; -export const rules = { +const rules = { 'use-method-usage': useMethodUsage, 'valid-lexical-scope': validLexicalScope, 'loader-location': loaderLocation, @@ -24,37 +25,70 @@ export const rules = { 'no-use-visible-task': noUseVisibleTask, }; -export const configs = { +const recommendedRules = { + 'qwik/use-method-usage': 'error', + 'qwik/valid-lexical-scope': 'error', + 'qwik/no-react-props': 'error', + 'qwik/prefer-classlist': 'warn', + 'qwik/jsx-no-script-url': 'warn', + 'qwik/loader-location': 'warn', + 'qwik/jsx-key': 'warn', + 'qwik/unused-server': 'error', + 'qwik/jsx-img': 'warn', + 'qwik/jsx-a': 'warn', + 'qwik/no-use-visible-task': 'warn', +}; +const strictRules = { + 'qwik/valid-lexical-scope': 'error', + 'qwik/use-method-usage': 'error', + 'qwik/loader-location': 'error', + 'qwik/no-react-props': 'error', + 'qwik/prefer-classlist': 'error', + 'qwik/jsx-no-script-url': 'error', + 'qwik/jsx-key': 'error', + 'qwik/unused-server': 'error', + 'qwik/jsx-img': 'error', + 'qwik/jsx-a': 'error', + 'qwik/no-use-visible-task': 'warn', +}; + +const configs = { recommended: { plugins: ['qwik'], - rules: { - 'qwik/use-method-usage': 'error', - 'qwik/valid-lexical-scope': 'error', - 'qwik/no-react-props': 'error', - 'qwik/prefer-classlist': 'warn', - 'qwik/jsx-no-script-url': 'warn', - 'qwik/loader-location': 'warn', - 'qwik/jsx-key': 'warn', - 'qwik/unused-server': 'error', - 'qwik/jsx-img': 'warn', - 'qwik/jsx-a': 'warn', - 'qwik/no-use-visible-task': 'warn', - }, + rules: recommendedRules, }, strict: { plugins: ['qwik'], - rules: { - 'qwik/valid-lexical-scope': 'error', - 'qwik/use-method-usage': 'error', - 'qwik/loader-location': 'error', - 'qwik/no-react-props': 'error', - 'qwik/prefer-classlist': 'error', - 'qwik/jsx-no-script-url': 'error', - 'qwik/jsx-key': 'error', - 'qwik/unused-server': 'error', - 'qwik/jsx-img': 'error', - 'qwik/jsx-a': 'error', - 'qwik/no-use-visible-task': 'warn', - }, + rules: strictRules, + }, +}; + +const qwikEslintPlugin = { + configs: {}, + meta: { + name: pkg.name, + version: pkg.version, }, + rules, }; + +Object.assign(qwikEslintPlugin.configs, { + recommended: [ + { + plugins: { + qwik: qwikEslintPlugin, + }, + rules: recommendedRules, + }, + ], + strict: [ + { + plugins: { + qwik: qwikEslintPlugin, + }, + rules: strictRules, + }, + ], +}); + +export { configs, qwikEslintPlugin as default, rules }; diff --git a/packages/eslint-plugin-qwik/package.json b/packages/eslint-plugin-qwik/package.json index ca727dc71ef..f0440966313 100644 --- a/packages/eslint-plugin-qwik/package.json +++ b/packages/eslint-plugin-qwik/package.json @@ -5,16 +5,16 @@ "author": "Builder Team", "bugs": "https://github.com/QwikDev/qwik/issues", "dependencies": { - "jsx-ast-utils": "^3.3.5", - "@typescript-eslint/utils": "^8.12.2" + "@typescript-eslint/utils": "^8.12.2", + "jsx-ast-utils": "^3.3.5" }, "devDependencies": { "@builder.io/qwik": "workspace:^", "@builder.io/qwik-city": "workspace:^", - "@types/eslint": "8.56.10", "@types/estree": "1.0.5", - "@typescript-eslint/rule-tester": "7.8.0", - "redent": "4.0.0" + "@typescript-eslint/rule-tester": "8.14.0", + "redent": "4.0.0", + "@types/jsx-ast-utils": "3.3.1" }, "engines": { "node": ">=16.8.0 <18.0.0 || >=18.11" @@ -32,7 +32,8 @@ "license": "MIT", "main": "dist/index.js", "peerDependencies": { - "eslint": "^8.57.0" + "eslint": "9.15.0", + "@types/eslint": "9.6.1" }, "repository": { "type": "git", diff --git a/packages/eslint-plugin-qwik/qwik.unit.ts b/packages/eslint-plugin-qwik/qwik.unit.ts index c411512174a..1401012fc94 100644 --- a/packages/eslint-plugin-qwik/qwik.unit.ts +++ b/packages/eslint-plugin-qwik/qwik.unit.ts @@ -1,7 +1,5 @@ import * as vitest from 'vitest'; -// @ts-ignore -import { RuleTester } from '@typescript-eslint/rule-tester'; - +import { RuleTester, type RuleTesterConfig } from '@typescript-eslint/rule-tester'; import { fileURLToPath } from 'node:url'; import { rules } from './index'; import { readdir, readFile, stat } from 'node:fs/promises'; @@ -14,22 +12,24 @@ RuleTester.itOnly = vitest.it.only; RuleTester.describe = vitest.describe; const testConfig = { - parser: '@typescript-eslint/parser', - env: { - es6: true, - }, - parserOptions: { - tsconfigRootDir: fileURLToPath(new URL('.', import.meta.url)), - project: ['./tests/tsconfig.json'], - ecmaFeatures: { - jsx: true, + languageOptions: { + parserOptions: { + projectService: { + allowDefaultProject: ['*.ts*'], + }, + sourceType: 'module', + ecmaFeatures: { + jsx: true, + }, + + ecmaVersion: 2024, + project: ['./tests/tsconfig.json'], + tsconfigRootDir: fileURLToPath(new URL('.', import.meta.url)), }, - ecmaVersion: 2020, - sourceType: 'module', }, -}; +} as RuleTesterConfig; -const ruleTester = new RuleTester(testConfig as any); +const ruleTester = new RuleTester(testConfig); interface TestCase { name: string; filename: string; diff --git a/packages/eslint-plugin-qwik/src/jsxAtag.ts b/packages/eslint-plugin-qwik/src/jsxAtag.ts index 2974f961016..713c29ee08e 100644 --- a/packages/eslint-plugin-qwik/src/jsxAtag.ts +++ b/packages/eslint-plugin-qwik/src/jsxAtag.ts @@ -1,6 +1,12 @@ import { ESLintUtils, TSESTree } from '@typescript-eslint/utils'; -const createRule = ESLintUtils.RuleCreator(() => 'https://qwik.dev/docs/advanced/dollar/'); +interface RuleOptions { + recommended: string; +} + +const createRule = ESLintUtils.RuleCreator( + () => 'https://qwik.dev/docs/advanced/dollar/' +); export const jsxAtag = createRule({ defaultOptions: [], diff --git a/packages/eslint-plugin-qwik/src/jsxImg.ts b/packages/eslint-plugin-qwik/src/jsxImg.ts index 70139b59115..dffe80f0d9a 100644 --- a/packages/eslint-plugin-qwik/src/jsxImg.ts +++ b/packages/eslint-plugin-qwik/src/jsxImg.ts @@ -1,7 +1,10 @@ import { ESLintUtils, TSESTree } from '@typescript-eslint/utils'; -import { QwikEslintExamples } from '../examples'; +import type { QwikEslintExamples } from '../examples'; +interface RuleOptions { + recommended: string; +} -const createRule = ESLintUtils.RuleCreator( +const createRule = ESLintUtils.RuleCreator( (name) => `https://qwik.dev/docs/advanced/eslint/#${name}` ); @@ -148,7 +151,7 @@ function imgImportName(value: string) { return `Img${toPascalCase(value)}`; } -function toPascalCase(string) { +function toPascalCase(string: string) { return `${string}` .toLowerCase() .replace(new RegExp(/[-_]+/, 'g'), ' ') diff --git a/packages/eslint-plugin-qwik/src/jsxKey.ts b/packages/eslint-plugin-qwik/src/jsxKey.ts index a6d497bc24b..01ca764bcfd 100644 --- a/packages/eslint-plugin-qwik/src/jsxKey.ts +++ b/packages/eslint-plugin-qwik/src/jsxKey.ts @@ -1,6 +1,5 @@ import jsxAstUtils from 'jsx-ast-utils'; -import { QwikEslintExamples } from '../examples'; - +import type { QwikEslintExamples } from '../examples'; // ------------------------------------------------------------------------------ // Rule Definition // ------------------------------------------------------------------------------ @@ -110,20 +109,20 @@ export const jsxKey = { return returnStatements; } - - function isKeyAfterSpread(attributes) { - let hasFoundSpread = false; - return attributes.some((attribute) => { - if (attribute.type === 'JSXSpreadAttribute') { - hasFoundSpread = true; - return false; - } - if (attribute.type !== 'JSXAttribute') { - return false; - } - return hasFoundSpread && jsxAstUtils.propName(attribute) === 'key'; - }); - } + // never used + // function isKeyAfterSpread(attributes) { + // let hasFoundSpread = false; + // return attributes.some((attribute) => { + // if (attribute.type === 'JSXSpreadAttribute') { + // hasFoundSpread = true; + // return false; + // } + // if (attribute.type !== 'JSXAttribute') { + // return false; + // } + // return hasFoundSpread && jsxAstUtils.propName(attribute) === 'key'; + // }); + // } /** * Checks if the given node is a function expression or arrow function, and checks if there is a diff --git a/packages/eslint-plugin-qwik/src/jsxNoScriptUrl.ts b/packages/eslint-plugin-qwik/src/jsxNoScriptUrl.ts index 120a9104b5b..a8b3f5c068f 100644 --- a/packages/eslint-plugin-qwik/src/jsxNoScriptUrl.ts +++ b/packages/eslint-plugin-qwik/src/jsxNoScriptUrl.ts @@ -1,5 +1,5 @@ import { ASTUtils } from '@typescript-eslint/utils'; -import { QwikEslintExamples } from '../examples'; +import type { QwikEslintExamples } from '../examples'; const { getStaticValue } = ASTUtils; // A javascript: URL can contain leading C0 control or \u0020 SPACE, diff --git a/packages/eslint-plugin-qwik/src/loaderLocation.ts b/packages/eslint-plugin-qwik/src/loaderLocation.ts index 095e3470213..e8a56ec0732 100644 --- a/packages/eslint-plugin-qwik/src/loaderLocation.ts +++ b/packages/eslint-plugin-qwik/src/loaderLocation.ts @@ -1,6 +1,6 @@ /* eslint-disable no-console */ import type { Rule } from 'eslint'; -import { QwikEslintExamples } from '../examples'; +import type { QwikEslintExamples } from '../examples'; export const ROUTE_FNS: Record = { loader$: true, diff --git a/packages/eslint-plugin-qwik/src/noReactProps.ts b/packages/eslint-plugin-qwik/src/noReactProps.ts index f7cd57e20fa..5c322600469 100644 --- a/packages/eslint-plugin-qwik/src/noReactProps.ts +++ b/packages/eslint-plugin-qwik/src/noReactProps.ts @@ -1,6 +1,6 @@ import type { TSESLint } from '@typescript-eslint/utils'; import jsxAstUtils from 'jsx-ast-utils'; -import { QwikEslintExamples } from '../examples'; +import type { QwikEslintExamples } from '../examples'; const reactSpecificProps = [ { from: 'className', to: 'class' }, diff --git a/packages/eslint-plugin-qwik/src/preferClasslist.ts b/packages/eslint-plugin-qwik/src/preferClasslist.ts index 9cf3bdde816..5993113989f 100644 --- a/packages/eslint-plugin-qwik/src/preferClasslist.ts +++ b/packages/eslint-plugin-qwik/src/preferClasslist.ts @@ -2,7 +2,7 @@ import type { TSESTree as T } from '@typescript-eslint/utils'; import jsxAstUtils from 'jsx-ast-utils'; -import { QwikEslintExamples } from '../examples'; +import type { QwikEslintExamples } from '../examples'; export const preferClasslist = { meta: { diff --git a/packages/eslint-plugin-qwik/src/unusedServer.ts b/packages/eslint-plugin-qwik/src/unusedServer.ts index f059f1e0c6c..2c9878a351f 100644 --- a/packages/eslint-plugin-qwik/src/unusedServer.ts +++ b/packages/eslint-plugin-qwik/src/unusedServer.ts @@ -1,6 +1,6 @@ /* eslint-disable no-console */ import type { Rule } from 'eslint'; -import { QwikEslintExamples } from '../examples'; +import type { QwikEslintExamples } from '../examples'; export const unusedServer: Rule.RuleModule = { meta: { diff --git a/packages/eslint-plugin-qwik/src/validLexicalScope.ts b/packages/eslint-plugin-qwik/src/validLexicalScope.ts index cf4c65d7cee..39aa81e13fc 100644 --- a/packages/eslint-plugin-qwik/src/validLexicalScope.ts +++ b/packages/eslint-plugin-qwik/src/validLexicalScope.ts @@ -4,7 +4,7 @@ import ts from 'typescript'; import type { Identifier } from 'estree'; import redent from 'redent'; import type { RuleContext, Scope } from '@typescript-eslint/utils/dist/ts-eslint'; -import { QwikEslintExamples } from '../examples'; +import type { QwikEslintExamples } from '../examples'; const createRule = ESLintUtils.RuleCreator( (name) => `https://qwik.dev/docs/advanced/eslint/#${name}` diff --git a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-capture-class.tsx b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-capture-class.tsx index 6f67d31fe43..5d5af6e8a7f 100644 --- a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-capture-class.tsx +++ b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-capture-class.tsx @@ -5,7 +5,7 @@ export const HelloWorld = component$(() => { class Stuff {} const stuff = new Stuff(); useTask$(() => { - // eslint-disable-next-line no-console + /* eslint no-console: [, { allow: ["log"] }] */ console.log(stuff); }); return
; diff --git a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-capture-function-event.tsx b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-capture-function-event.tsx index 340be012372..1be3e26ab2d 100644 --- a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-capture-function-event.tsx +++ b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-capture-function-event.tsx @@ -1,7 +1,7 @@ // Expect error: { "messageId": "invalidJsxDollar" } import { component$, useTask$ } from '@builder.io/qwik'; export const HelloWorld = component$(() => { - // eslint-disable-next-line no-console + /* eslint no-console: [, { allow: ["log"] }] */ const click = () => console.log(); return ; }); diff --git a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-capture-function.tsx b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-capture-function.tsx index 0e9b23bd7ad..5571d9509d8 100644 --- a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-capture-function.tsx +++ b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-capture-function.tsx @@ -6,14 +6,14 @@ export const HelloWorld = component$(() => { return 'string'; } else { return () => { - // eslint-disable-next-line no-console + /* eslint no-console: [, { allow: ["log"] }] */ console.log(); }; } } const a = getValue(); useTask$(() => { - // eslint-disable-next-line no-console + /* eslint no-console: [, { allow: ["log"] }] */ console.log(a); }); return
; diff --git a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-capture-symbol.tsx b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-capture-symbol.tsx index 77701b1afc9..f4399b57c05 100644 --- a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-capture-symbol.tsx +++ b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-capture-symbol.tsx @@ -4,7 +4,7 @@ import { component$, useTask$ } from '@builder.io/qwik'; export const HelloWorld = component$(() => { const a = Symbol(); useTask$(() => { - // eslint-disable-next-line no-console + /* eslint no-console: [, { allow: ["log"] }] */ console.log(a); }); return
; diff --git a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-mutable.tsx b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-mutable.tsx index 9d0ec62670b..ab19d294c47 100644 --- a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-mutable.tsx +++ b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-mutable.tsx @@ -6,7 +6,7 @@ export const HelloWorld = component$(() => { const divRef = useSignal<{ offsetLeft: number }>(); const handleMouseDown = $((e: MouseEvent) => { - // eslint-disable-next-line no-console + /* eslint no-console: [, { allow: ["log"] }] */ console.log('working'); startX = e.pageX - divRef.value!.offsetLeft; }); diff --git a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-use-method-factory.tsx b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-use-method-factory.tsx index be80bb381a9..d81fbeceb12 100644 --- a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-use-method-factory.tsx +++ b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-use-method-factory.tsx @@ -7,7 +7,7 @@ export const HelloWorld = component$(() => { }; const useMethod = getMethod(); useTask$(() => { - // eslint-disable-next-line no-console + /* eslint no-console: [, { allow: ["log"] }] */ console.log(useMethod); }); return
; diff --git a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-use-method-inline.tsx b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-use-method-inline.tsx index 549e3bcc8d8..38f7a7015b1 100644 --- a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-use-method-inline.tsx +++ b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/invalid-use-method-inline.tsx @@ -3,11 +3,11 @@ import { component$, useTask$ } from '@builder.io/qwik'; export const HelloWorld = component$(() => { function useMethod() { - // eslint-disable-next-line no-console + /* eslint no-console: [, { allow: ["log"] }] */ console.log('stuff'); } useTask$(() => { - // eslint-disable-next-line no-console + /* eslint no-console: [, { allow: ["log"] }] */ console.log(useMethod); }); return
; diff --git a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-capture-jsxoutput.tsx b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-capture-jsxoutput.tsx index f7bccc4c7f0..6fa20dbd74b 100644 --- a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-capture-jsxoutput.tsx +++ b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-capture-jsxoutput.tsx @@ -9,7 +9,7 @@ export default component$(() => { state.foo =
Foo
; useTask$(() => { - // eslint-disable-next-line no-console + /* eslint no-console: [, { allow: ["log"] }] */ console.log(state.foo); }); return <>; diff --git a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-constant.tsx b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-constant.tsx index b0a1d65f975..d582d61e0fc 100644 --- a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-constant.tsx +++ b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-constant.tsx @@ -7,7 +7,7 @@ export const HelloWorld = component$(() => { return (
{ - // eslint-disable-next-line no-console + /* eslint no-console: [, { allow: ["log"] }] */ console.log(a); }} >
diff --git a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-no-serialize.tsx b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-no-serialize.tsx index e595fe1d800..61f5d8f5483 100644 --- a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-no-serialize.tsx +++ b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-no-serialize.tsx @@ -10,7 +10,7 @@ export function getFn(): NoSerialize<() => void> { export const HelloWorld = component$(() => { const state: Value = { value: 12, fn: getFn() }; useTask$(() => { - // eslint-disable-next-line no-console + /* eslint no-console: [, { allow: ["log"] }] */ console.log(state.value); }); return
; diff --git a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-use-method-factory.tsx b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-use-method-factory.tsx index c01a5ec4957..9e13c458bbd 100644 --- a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-use-method-factory.tsx +++ b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-use-method-factory.tsx @@ -19,7 +19,7 @@ export const HelloWorld = component$(() => { }, }; useTask$(() => { - // eslint-disable-next-line no-console + /* eslint no-console: [, { allow: ["log"] }] */ console.log(useMethod, obj); }); return
; diff --git a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-use-task-getter.tsx b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-use-task-getter.tsx index f1cff2f4413..8407bd36f3c 100644 --- a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-use-task-getter.tsx +++ b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-use-task-getter.tsx @@ -5,7 +5,7 @@ export const HelloWorld = component$(() => { } const a = getValue(); useTask$(() => { - // eslint-disable-next-line no-console + /* eslint no-console: [, { allow: ["log"] }] */ console.log(a); }); return
; diff --git a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-use-task.tsx b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-use-task.tsx index 1449e707e7b..ff7aa58e94d 100644 --- a/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-use-task.tsx +++ b/packages/eslint-plugin-qwik/tests/valid-lexical-scope/valid-use-task.tsx @@ -6,7 +6,7 @@ export const HelloWorld = component$(() => { }; const useMethod = getMethod(); useTask$(() => { - // eslint-disable-next-line no-console + /* eslint no-console: [, { allow: ["log"] }] */ console.log(useMethod); }); return
; diff --git a/packages/insights/eslint.config.mjs b/packages/insights/eslint.config.mjs new file mode 100644 index 00000000000..6048131181f --- /dev/null +++ b/packages/insights/eslint.config.mjs @@ -0,0 +1,51 @@ +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; +import { fileURLToPath } from 'url'; +import { dirname } from 'path'; +import typescript from '@typescript-eslint/eslint-plugin'; +import qwik from 'eslint-plugin-qwik'; +const __dirname = dirname(fileURLToPath(import.meta.url)); +import globals from 'globals'; + +export default tseslint.config( + eslint.configs.recommended, + tseslint.configs.recommended, + qwik.configs.recommended, + { + languageOptions: { + parserOptions: { + sourceType: 'module', + ecmaFeatures: { + jsx: true, + }, + globals: { + ...globals.node, + ...globals.es2021, + ...globals.browser, + }, + ecmaVersion: 2021, + project: ['./tsconfig.json'], + tsconfigRootDir: __dirname, + }, + }, + plugins: { + '@typescript-eslint': typescript, + }, + rules: { + '@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/package.json b/packages/insights/package.json index 55033571683..a8cfb39359d 100644 --- a/packages/insights/package.json +++ b/packages/insights/package.json @@ -19,13 +19,14 @@ "@builder.io/vite-plugin-macro": "0.0.7", "@netlify/edge-functions": "2.10.0", "@types/density-clustering": "1.3.3", - "@types/eslint": "8.56.10", + "@types/eslint": "9.6.1", "@types/node": "20.14.11", - "@typescript-eslint/eslint-plugin": "7.16.1", - "@typescript-eslint/parser": "7.16.1", + "@typescript-eslint/eslint-plugin": "8.18.0", "autoprefixer": "10.4.19", "better-sqlite3": "9.6.0", - "eslint": "8.57.0", + "eslint": "9.16.0", + "globals": "15.13.0", + "typescript-eslint": "8.18.0", "eslint-plugin-qwik": "workspace:^", "netlify-cli": "17.37.2", "postcss": "8.4.39", 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..aab040b4e97 --- /dev/null +++ b/packages/qwik-labs/eslint.config.mjs @@ -0,0 +1,49 @@ +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; +import { fileURLToPath } from 'url'; +import { dirname } from 'path'; +import typescript from '@typescript-eslint/eslint-plugin'; +import qwik from 'eslint-plugin-qwik'; +const __dirname = dirname(fileURLToPath(import.meta.url)); +import globals from 'globals'; + +export default tseslint.config( + eslint.configs.recommended, + tseslint.configs.recommended, + qwik.configs.recommended, + { + languageOptions: { + parserOptions: { + sourceType: 'module', + ecmaFeatures: { + jsx: true, + }, + globals: { + ...globals.node, + ...globals.es2021, + ...globals.browser, + }, + ecmaVersion: 2021, + project: ['./tsconfig.json', './tsconfig-vite.json'], + tsconfigRootDir: __dirname, + }, + }, + plugins: { '@typescript-eslint': typescript }, + 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/package.json b/packages/qwik-labs/package.json index c66608d5148..54f965a224d 100644 --- a/packages/qwik-labs/package.json +++ b/packages/qwik-labs/package.json @@ -4,17 +4,18 @@ "version": "0.0.1", "devDependencies": { "@builder.io/qwik": "workspace:^", - "@types/eslint": "8.56.10", + "@types/eslint": "9.6.1", "@types/node": "20.14.11", - "@typescript-eslint/eslint-plugin": "7.16.1", - "@typescript-eslint/parser": "7.16.1", - "eslint": "8.57.0", + "@typescript-eslint/eslint-plugin": "8.18.0", + "eslint": "9.16.0", + "typescript-eslint": "8.18.0", "eslint-plugin-qwik": "workspace:^", "np": "10.0.1", "prettier": "3.3.3", "typescript": "5.4.5", "undici": "*", "vite": "5.3.5", + "globals": "15.13.0", "zod": "3.22.4" }, "engines": { @@ -38,8 +39,8 @@ ], "main": "./lib/index.qwik.mjs", "peerDependencies": { - "zod": "3.22.4", - "vite": "^5" + "vite": "^5", + "zod": "3.22.4" }, "private": true, "qwik": "./lib/index.qwik.mjs", diff --git a/packages/qwik/package.json b/packages/qwik/package.json index 5a04f879ba6..341282aa6d6 100644 --- a/packages/qwik/package.json +++ b/packages/qwik/package.json @@ -30,9 +30,9 @@ "devDependencies": { "@builder.io/qwik": "workspace:^", "@builder.io/qwik-dom": "workspace:^", + "ignore": "5.3.1", "image-size": "1.1.1", "kleur": "4.1.5", - "ignore": "5.3.1", "ts-morph": "23.0.0" }, "engines": { diff --git a/packages/qwik/src/optimizer/src/plugins/eslint-plugin.ts b/packages/qwik/src/optimizer/src/plugins/eslint-plugin.ts index d9ac856fa3d..141dd62859e 100644 --- a/packages/qwik/src/optimizer/src/plugins/eslint-plugin.ts +++ b/packages/qwik/src/optimizer/src/plugins/eslint-plugin.ts @@ -1,7 +1,8 @@ import type { Rollup } from 'vite'; import type { ESLint, Linter } from 'eslint'; import type { OptimizerSystem } from '../types'; - +import qwik from 'eslint-plugin-qwik'; +import globals from 'globals'; export interface QwikLinter { lint(ctx: Rollup.PluginContext, code: string, id: string): void; } @@ -20,26 +21,27 @@ 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, + overrideConfig: [ + qwik.configs.recommended, + { + languageOptions: { + parserOptions: { + globals: { + ...globals.node, + ...globals.es2021, + ...globals.browser, + }, + tsconfigRootDir: rootDir, + project: tsconfigFileNames, + ecmaVersion: 2021, + sourceType: 'module', + ecmaFeatures: { + jsx: true, + }, + }, }, }, - }, + ], }; eslint = new module.ESLint(options) as ESLint; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b08cf53f764..bbbbf54f317 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -80,8 +80,8 @@ importers: specifier: 6.0.6 version: 6.0.6 '@types/eslint': - specifier: 8.56.10 - version: 8.56.10 + specifier: 9.6.1 + version: 9.6.1 '@types/express': specifier: 4.17.21 version: 4.17.21 @@ -107,11 +107,8 @@ importers: 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) + specifier: 8.18.0 + version: 8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5))(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5) all-contributors-cli: specifier: 6.26.1 version: 6.26.1 @@ -137,8 +134,8 @@ importers: specifier: 0.20.2 version: 0.20.2 eslint: - specifier: 8.57.0 - version: 8.57.0 + specifier: 9.16.0 + version: 9.16.0(jiti@1.21.0) eslint-plugin-no-only-tests: specifier: 3.1.0 version: 3.1.0 @@ -151,6 +148,9 @@ importers: express: specifier: 4.20.0 version: 4.20.0 + globals: + specifier: 15.13.0 + version: 15.13.0 install: specifier: 0.13.0 version: 0.13.0 @@ -214,6 +214,9 @@ importers: typescript: specifier: 5.4.5 version: 5.4.5 + typescript-eslint: + specifier: 8.18.0 + version: 8.18.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5) undici: specifier: '*' version: 6.6.2 @@ -426,7 +429,7 @@ importers: dependencies: '@typescript-eslint/utils': specifier: ^8.12.2 - version: 8.12.2(eslint@8.57.0)(typescript@5.4.5) + version: 8.12.2(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5) jsx-ast-utils: specifier: ^3.3.5 version: 3.3.5 @@ -437,15 +440,15 @@ importers: '@builder.io/qwik-city': specifier: workspace:^ version: link:../qwik-city - '@types/eslint': - specifier: 8.56.10 - version: 8.56.10 '@types/estree': specifier: 1.0.5 version: 1.0.5 + '@types/jsx-ast-utils': + specifier: 3.3.1 + version: 3.3.1 '@typescript-eslint/rule-tester': - specifier: 7.8.0 - version: 7.8.0(@eslint/eslintrc@3.1.0)(eslint@8.57.0)(typescript@5.4.5) + specifier: 8.14.0 + version: 8.14.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5) redent: specifier: 4.0.0 version: 4.0.0 @@ -496,17 +499,14 @@ importers: specifier: 1.3.3 version: 1.3.3 '@types/eslint': - specifier: 8.56.10 - version: 8.56.10 + specifier: 9.6.1 + version: 9.6.1 '@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) + specifier: 8.18.0 + version: 8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5))(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5) autoprefixer: specifier: 10.4.19 version: 10.4.19(postcss@8.4.39) @@ -514,11 +514,14 @@ importers: specifier: 9.6.0 version: 9.6.0 eslint: - specifier: 8.57.0 - version: 8.57.0 + specifier: 9.16.0 + version: 9.16.0(jiti@1.21.0) eslint-plugin-qwik: specifier: workspace:^ version: link:../eslint-plugin-qwik + globals: + specifier: 15.13.0 + version: 15.13.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) @@ -537,6 +540,9 @@ importers: typescript: specifier: 5.4.5 version: 5.4.5 + typescript-eslint: + specifier: 8.18.0 + version: 8.18.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5) undici: specifier: '*' version: 6.6.2 @@ -717,23 +723,23 @@ importers: specifier: workspace:^ version: link:../qwik '@types/eslint': - specifier: 8.56.10 - version: 8.56.10 + specifier: 9.6.1 + version: 9.6.1 '@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) + specifier: 8.18.0 + version: 8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5))(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5) eslint: - specifier: 8.57.0 - version: 8.57.0 + specifier: 9.16.0 + version: 9.16.0(jiti@1.21.0) eslint-plugin-qwik: specifier: workspace:^ version: link:../eslint-plugin-qwik + globals: + specifier: 15.13.0 + version: 15.13.0 np: specifier: 10.0.1 version: 10.0.1(typescript@5.4.5) @@ -743,6 +749,9 @@ importers: typescript: specifier: 5.4.5 version: 5.4.5 + typescript-eslint: + specifier: 8.18.0 + version: 8.18.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5) undici: specifier: '*' version: 6.6.2 @@ -2300,12 +2309,6 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/eslint-utils@4.4.1': resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2316,17 +2319,37 @@ packages: resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} 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-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.19.1': + resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.9.1': + resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.1.0': resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} 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/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.16.0': + resolution: {integrity: sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.5': + resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.4': + resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@fastify/accept-negotiator@1.1.0': resolution: {integrity: sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==} @@ -2363,10 +2386,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==} @@ -2376,9 +2402,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.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} '@iarna/toml@2.2.5': resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} @@ -2409,67 +2439,79 @@ packages: resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.0.5': resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.0.4': resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.0.4': resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.0.4': resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.0.4': resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.33.5': resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.33.5': resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.33.5': resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.33.5': resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.33.5': resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.33.5': resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.33.5': resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} @@ -3039,30 +3081,35 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-glibc@2.4.1': resolution: {integrity: sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.4.1': resolution: {integrity: sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.4.1': resolution: {integrity: sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.4.1': resolution: {integrity: sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-wasm@2.4.0': resolution: {integrity: sha512-MNgQ4WCbBybqQ97KwR/hqJGYTg3+s8qHpgIyFWB2qJOBvoJWbXuJGmm4ZkPLq2bMaANqCZqrXwmKYagZTkMKZA==} @@ -3167,46 +3214,55 @@ packages: resolution: {integrity: sha512-2Rn36Ubxdv32NUcfm0wB1tgKqkQuft00PtM23VqLuCUR4N5jcNWDoV5iBC9jeGdgS38WK66ElncprqgMUOyomw==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.19.0': resolution: {integrity: sha512-gJuzIVdq/X1ZA2bHeCGCISe0VWqCoNT8BvkQ+BfsixXwTOndhtLUpOg0A1Fcx/+eA6ei6rMBzlOz4JzmiDw7JQ==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.19.0': resolution: {integrity: sha512-0EkX2HYPkSADo9cfeGFoQ7R0/wTKb7q6DdwI4Yn/ULFE1wuRRCHybxpl2goQrx4c/yzK3I8OlgtBu4xvted0ug==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.19.0': resolution: {integrity: sha512-GlIQRj9px52ISomIOEUq/IojLZqzkvRpdP3cLgIE1wUWaiU5Takwlzpz002q0Nxxr1y2ZgxC2obWxjr13lvxNQ==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-powerpc64le-gnu@4.19.0': resolution: {integrity: sha512-N6cFJzssruDLUOKfEKeovCKiHcdwVYOT1Hs6dovDQ61+Y9n3Ek4zXvtghPPelt6U0AH4aDGnDLb83uiJMkWYzQ==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.19.0': resolution: {integrity: sha512-2DnD3mkS2uuam/alF+I7M84koGwvn3ZVD7uG+LEWpyzo/bq8+kKnus2EVCkcvh6PlNB8QPNFOz6fWd5N8o1CYg==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-s390x-gnu@4.19.0': resolution: {integrity: sha512-D6pkaF7OpE7lzlTOFCB2m3Ngzu2ykw40Nka9WmKGUOTS3xcIieHe82slQlNq69sVB04ch73thKYIWz/Ian8DUA==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.19.0': resolution: {integrity: sha512-HBndjQLP8OsdJNSxpNIN0einbDmRFg9+UQeZV1eiYupIRuZsDEoeGU43NQsS34Pp166DtwQOnpcbV/zQxM+rWA==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.19.0': resolution: {integrity: sha512-HxfbvfCKJe/RMYJJn0a12eiOI9OOtAUF4G6ozrFUK95BNyoJaSiBjIOHjZskTUffUrB84IPKkFG9H9nEvJGW6A==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-win32-arm64-msvc@4.19.0': resolution: {integrity: sha512-HxDMKIhmcguGTiP5TsLNolwBUK3nGGUEoV/BO9ldUBoMLBssvh4J0X8pf11i1fTV7WShWItB1bKAKjX4RQeYmg==} @@ -3378,8 +3434,8 @@ 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==} @@ -3387,6 +3443,9 @@ packages: '@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==} @@ -3423,6 +3482,9 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/jsx-ast-utils@3.3.1': + resolution: {integrity: sha512-au6/M8boVMhGJfZXghOLRBD4iKGxYJHF6fwFnVpUR6l1Pm51B6DG80ckwubjdankpVhIXJ1jgdGiQ0r717wIkg==} + '@types/leaflet@1.9.12': resolution: {integrity: sha512-BK7XS+NyRI291HIo0HCfE18Lp8oA30H1gpi1tf0mF3TgiCEzanQjOqNZ4x126SXzzi2oNSZhZ5axJp1k0iM6jg==} @@ -3537,72 +3599,62 @@ 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.18.0': + resolution: {integrity: sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw==} + 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.18.0': + resolution: {integrity: sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q==} + 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@7.8.0': - resolution: {integrity: sha512-f1wXWeZx8XJB/z9Oyjx0ZLmhvcFelSJ0CVvOurCkrISOZhre+imIj5FQQz1rBy/Ips0dCbVl5G4MWTuzlzj5QQ==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/rule-tester@8.14.0': + resolution: {integrity: sha512-q5Gi0CMFLojXZMvdWTIjOcBtV3qUg2xtUJocBxkd6PZ5YfHw9bd/Q+P5vtBu1Mrjs8OhId5WpOaMqjbUXLLBYA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@eslint/eslintrc': '>=2' - eslint: ^8.56.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@7.8.0': - resolution: {integrity: sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==} - engines: {node: ^18.18.0 || >=20.0.0} + eslint: ^8.57.0 || ^9.0.0 '@typescript-eslint/scope-manager@8.12.2': resolution: {integrity: sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==} 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.14.0': + resolution: {integrity: sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/scope-manager@8.18.0': + resolution: {integrity: sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.18.0': + resolution: {integrity: sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow==} + 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@7.8.0': - resolution: {integrity: sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==} - engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@8.12.2': resolution: {integrity: sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.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.18.0': + resolution: {integrity: sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==} + 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} @@ -3612,67 +3664,65 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@7.16.1': - resolution: {integrity: sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/typescript-estree@8.12.2': + resolution: {integrity: sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/typescript-estree@7.8.0': - resolution: {integrity: sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@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} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/typescript-estree@8.12.2': - resolution: {integrity: sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==} + '@typescript-eslint/typescript-estree@8.18.0': + resolution: {integrity: sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: 5.4.5 - '@typescript-eslint/utils@7.16.1': - resolution: {integrity: sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/utils@8.12.2': + resolution: {integrity: sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 - '@typescript-eslint/utils@7.8.0': - resolution: {integrity: sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/utils@8.14.0': + resolution: {integrity: sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 - '@typescript-eslint/utils@8.12.2': - resolution: {integrity: sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==} + '@typescript-eslint/utils@8.18.0': + resolution: {integrity: sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==} 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@7.8.0': - resolution: {integrity: sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==} - engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@8.12.2': resolution: {integrity: sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.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.18.0': + resolution: {integrity: sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript/analyze-trace@0.10.1': resolution: {integrity: sha512-RnlSOPh14QbopGCApgkSx5UBgGda5MX1cHqp2fsqfiDyCwGL/m1jaeB9fzu7didVS81LQqGZZuxFBcg8YU8EVw==} hasBin: true @@ -3799,6 +3849,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -4639,6 +4694,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==} @@ -4923,10 +4982,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==} @@ -5384,9 +5439,9 @@ packages: resolution: {integrity: sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==} 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.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + 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==} @@ -5396,11 +5451,19 @@ packages: resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==} 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-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.16.0: + resolution: {integrity: sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==} + 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==} @@ -5410,9 +5473,9 @@ packages: resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==} 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} + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} @@ -5662,9 +5725,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==} @@ -5731,9 +5794,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==} @@ -5967,14 +6030,14 @@ packages: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} engines: {node: '>=10'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} + globals@15.13.0: + resolution: {integrity: sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==} + engines: {node: '>=18'} + globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -9162,9 +9225,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'} @@ -9293,12 +9353,6 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - ts-api-utils@1.3.0: - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: 5.4.5 - ts-api-utils@1.4.0: resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} engines: {node: '>=16'} @@ -9367,10 +9421,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'} @@ -9424,6 +9474,13 @@ packages: typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + typescript-eslint@8.18.0: + resolution: {integrity: sha512-Xq2rRjn6tzVpAyHr3+nmSg1/9k9aIHnJ2iZeOH7cfGOWqTkXTm3kwpQglEuLGdNrYvPF+2gtAs+/KF5rjVo+WQ==} + 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'} @@ -11173,24 +11230,33 @@ snapshots: '@esbuild/win32-x64@0.23.1': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + '@eslint-community/eslint-utils@4.4.1(eslint@9.16.0(jiti@1.21.0))': dependencies: - eslint: 8.57.0 + eslint: 9.16.0(jiti@1.21.0) eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.4.1(eslint@8.57.0)': + '@eslint-community/regexpp@4.11.1': {} + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.19.1': dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 + '@eslint/object-schema': 2.1.5 + debug: 4.3.7(supports-color@9.4.0) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color - '@eslint-community/regexpp@4.11.1': {} + '@eslint/core@0.9.1': + dependencies: + '@types/json-schema': 7.0.15 - '@eslint/eslintrc@2.1.4': + '@eslint/eslintrc@3.1.0': dependencies: ajv: 6.12.6 debug: 4.3.7(supports-color@9.4.0) - espree: 9.6.1 - globals: 13.24.0 + espree: 10.2.0 + globals: 14.0.0 ignore: 5.3.1 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -11199,11 +11265,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/eslintrc@3.1.0': + '@eslint/eslintrc@3.2.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 @@ -11213,7 +11279,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.0': {} + '@eslint/js@9.16.0': {} + + '@eslint/object-schema@2.1.5': {} + + '@eslint/plugin-kit@0.2.4': + dependencies: + levn: 0.4.1 '@fastify/accept-negotiator@1.1.0': {} @@ -11263,19 +11335,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.1': {} '@iarna/toml@2.2.5': {} @@ -12476,7 +12549,7 @@ snapshots: '@types/density-clustering@1.3.3': {} - '@types/eslint@8.56.10': + '@types/eslint@9.6.1': dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 @@ -12487,6 +12560,8 @@ snapshots: '@types/estree@1.0.5': {} + '@types/estree@1.0.6': {} + '@types/express-serve-static-core@4.17.43': dependencies: '@types/node': 20.14.11 @@ -12531,6 +12606,11 @@ snapshots: '@types/json-schema@7.0.15': {} + '@types/jsx-ast-utils@3.3.1': + dependencies: + '@types/estree': 1.0.5 + '@types/estree-jsx': 1.0.5 + '@types/leaflet@1.9.12': dependencies: '@types/geojson': 7946.0.14 @@ -12649,84 +12729,81 @@ 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.18.0(@typescript-eslint/parser@8.18.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5))(eslint@9.16.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 + '@typescript-eslint/parser': 8.18.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5) + '@typescript-eslint/scope-manager': 8.18.0 + '@typescript-eslint/type-utils': 8.18.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5) + '@typescript-eslint/utils': 8.18.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.18.0 + eslint: 9.16.0(jiti@1.21.0) graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - optionalDependencies: + ts-api-utils: 1.4.0(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.18.0(eslint@9.16.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.18.0 + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.18.0 debug: 4.3.7(supports-color@9.4.0) - eslint: 8.57.0 - optionalDependencies: + eslint: 9.16.0(jiti@1.21.0) typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/rule-tester@7.8.0(@eslint/eslintrc@3.1.0)(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/rule-tester@8.14.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5)': dependencies: - '@eslint/eslintrc': 3.1.0 - '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.4.5) + '@typescript-eslint/utils': 8.14.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5) ajv: 6.12.6 - eslint: 8.57.0 + eslint: 9.16.0(jiti@1.21.0) + json-stable-stringify-without-jsonify: 1.0.1 lodash.merge: 4.6.2 semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/scope-manager@7.16.1': + '@typescript-eslint/scope-manager@8.12.2': dependencies: - '@typescript-eslint/types': 7.16.1 - '@typescript-eslint/visitor-keys': 7.16.1 + '@typescript-eslint/types': 8.12.2 + '@typescript-eslint/visitor-keys': 8.12.2 - '@typescript-eslint/scope-manager@7.8.0': + '@typescript-eslint/scope-manager@8.14.0': dependencies: - '@typescript-eslint/types': 7.8.0 - '@typescript-eslint/visitor-keys': 7.8.0 + '@typescript-eslint/types': 8.14.0 + '@typescript-eslint/visitor-keys': 8.14.0 - '@typescript-eslint/scope-manager@8.12.2': + '@typescript-eslint/scope-manager@8.18.0': dependencies: - '@typescript-eslint/types': 8.12.2 - '@typescript-eslint/visitor-keys': 8.12.2 + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/visitor-keys': 8.18.0 - '@typescript-eslint/type-utils@7.16.1(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/type-utils@8.18.0(eslint@9.16.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.18.0(typescript@5.4.5) + '@typescript-eslint/utils': 8.18.0(eslint@9.16.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.3.0(typescript@5.4.5) - optionalDependencies: + eslint: 9.16.0(jiti@1.21.0) + ts-api-utils: 1.4.0(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.12.2': {} - '@typescript-eslint/types@7.8.0': {} + '@typescript-eslint/types@8.14.0': {} - '@typescript-eslint/types@8.12.2': {} + '@typescript-eslint/types@8.18.0': {} '@typescript-eslint/typescript-estree@5.62.0(supports-color@9.4.0)(typescript@5.4.5)': dependencies: @@ -12742,27 +12819,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.16.1(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@8.12.2(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 7.16.1 - '@typescript-eslint/visitor-keys': 7.16.1 + '@typescript-eslint/types': 8.12.2 + '@typescript-eslint/visitor-keys': 8.12.2 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.4 + minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.4.5) + ts-api-utils: 1.4.0(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.8.0(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@8.14.0(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 7.8.0 - '@typescript-eslint/visitor-keys': 7.8.0 + '@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 @@ -12772,76 +12849,72 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.12.2(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@8.18.0(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 8.12.2 - '@typescript-eslint/visitor-keys': 8.12.2 + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/visitor-keys': 8.18.0 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: 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.12.2(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(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.16.0(jiti@1.21.0)) + '@typescript-eslint/scope-manager': 8.12.2 + '@typescript-eslint/types': 8.12.2 + '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.4.5) + eslint: 9.16.0(jiti@1.21.0) transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@7.8.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/utils@8.14.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.8.0 - '@typescript-eslint/types': 7.8.0 - '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) - eslint: 8.57.0 - semver: 7.6.3 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.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.16.0(jiti@1.21.0) transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@8.12.2(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/utils@8.18.0(eslint@9.16.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.12.2 - '@typescript-eslint/types': 8.12.2 - '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.4.5) - eslint: 8.57.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@1.21.0)) + '@typescript-eslint/scope-manager': 8.18.0 + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.4.5) + eslint: 9.16.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': + '@typescript-eslint/visitor-keys@8.12.2': dependencies: - '@typescript-eslint/types': 7.16.1 + '@typescript-eslint/types': 8.12.2 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@7.8.0': + '@typescript-eslint/visitor-keys@8.14.0': dependencies: - '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/types': 8.14.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.12.2': + '@typescript-eslint/visitor-keys@8.18.0': dependencies: - '@typescript-eslint/types': 8.12.2 - eslint-visitor-keys: 3.4.3 + '@typescript-eslint/types': 8.18.0 + eslint-visitor-keys: 4.2.0 '@typescript/analyze-trace@0.10.1': dependencies: @@ -13031,10 +13104,16 @@ snapshots: dependencies: acorn: 8.12.1 + acorn-jsx@5.3.2(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + acorn-walk@8.3.2: {} acorn@8.12.1: {} + acorn@8.14.0: {} + agent-base@6.0.2(supports-color@9.4.0): dependencies: debug: 4.3.7(supports-color@9.4.0) @@ -13957,6 +14036,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: @@ -14209,10 +14294,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 @@ -14747,7 +14828,7 @@ snapshots: eslint-plugin-no-only-tests@3.1.0: {} - eslint-scope@7.2.2: + eslint-scope@8.2.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 @@ -14756,46 +14837,46 @@ snapshots: eslint-visitor-keys@4.1.0: {} - eslint@8.57.0: + eslint-visitor-keys@4.2.0: {} + + eslint@9.16.0(jiti@1.21.0): dependencies: - '@eslint-community/eslint-utils': 4.4.0(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.16.0(jiti@1.21.0)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.1 + '@eslint/core': 0.9.1 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.16.0 + '@eslint/plugin-kit': 0.2.4 + '@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.1 + '@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.2.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 @@ -14812,11 +14893,11 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 4.1.0 - espree@9.6.1: + espree@10.3.0: dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) - eslint-visitor-keys: 3.4.3 + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 esprima@4.0.1: {} @@ -15169,9 +15250,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: @@ -15257,11 +15338,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: {} @@ -15504,12 +15584,10 @@ snapshots: dependencies: ini: 2.0.0 - globals@13.24.0: - dependencies: - type-fest: 0.20.2 - globals@14.0.0: {} + globals@15.13.0: {} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -19437,8 +19515,6 @@ snapshots: text-hex@1.0.0: {} - text-table@0.2.0: {} - thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -19537,10 +19613,6 @@ snapshots: trough@2.2.0: {} - ts-api-utils@1.3.0(typescript@5.4.5): - dependencies: - typescript: 5.4.5 - ts-api-utils@1.4.0(typescript@5.4.5): dependencies: typescript: 5.4.5 @@ -19604,8 +19676,6 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-fest@0.20.2: {} - type-fest@0.21.3: {} type-fest@0.8.1: {} @@ -19663,6 +19733,16 @@ snapshots: dependencies: is-typedarray: 1.0.0 + typescript-eslint@8.18.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5): + dependencies: + '@typescript-eslint/eslint-plugin': 8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5))(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5) + '@typescript-eslint/parser': 8.18.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5) + '@typescript-eslint/utils': 8.18.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.4.5) + eslint: 9.16.0(jiti@1.21.0) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + typescript@5.4.5: {} ufo@1.5.4: {} 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.mjs b/starters/apps/base/eslint.config.mjs new file mode 100644 index 00000000000..45c4cc02d8c --- /dev/null +++ b/starters/apps/base/eslint.config.mjs @@ -0,0 +1,53 @@ +import eslint from "@eslint/js"; +import tseslint from "typescript-eslint"; +import { fileURLToPath } from "url"; +import { dirname } from "path"; +import typescript from "@typescript-eslint/eslint-plugin"; +import qwik from "eslint-plugin-qwik"; +const __dirname = dirname(fileURLToPath(import.meta.url)); +import globals from "globals"; + +export default tseslint.config( + eslint.configs.recommended, + tseslint.configs.recommended, + qwik.configs.recommended, + { + languageOptions: { + parserOptions: { + sourceType: "module", + ecmaFeatures: { + jsx: true, + }, + globals: { + ...globals.node, + ...globals.es2021, + ...globals.browser, + }, + ecmaVersion: 2021, + project: ["./tsconfig.json"], + tsconfigRootDir: __dirname, + }, + }, + plugins: { + "@typescript-eslint": typescript, + }, + 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/package.json b/starters/apps/base/package.json index b6cab10066c..9da6f18c3db 100644 --- a/starters/apps/base/package.json +++ b/starters/apps/base/package.json @@ -21,7 +21,8 @@ "@types/eslint": "latest", "@types/node": "latest", "@typescript-eslint/eslint-plugin": "latest", - "@typescript-eslint/parser": "latest", + "typescript-eslint": "latest", + "globals": "latest", "eslint": "latest", "eslint-plugin-qwik": "latest", "prettier": "latest", 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.mjs b/starters/apps/library/eslint.config.mjs new file mode 100644 index 00000000000..b69807562ea --- /dev/null +++ b/starters/apps/library/eslint.config.mjs @@ -0,0 +1,51 @@ +import eslint from "@eslint/js"; +import tseslint from "typescript-eslint"; +import { fileURLToPath } from "url"; +import { dirname } from "path"; +import typescript from "@typescript-eslint/eslint-plugin"; +import qwik from "eslint-plugin-qwik"; +const __dirname = dirname(fileURLToPath(import.meta.url)); +import globals from "globals"; + +export default tseslint.config( + eslint.configs.recommended, + tseslint.configs.recommended, + qwik.configs.recommended, + { + languageOptions: { + parserOptions: { + sourceType: "module", + ecmaFeatures: { + jsx: true, + }, + globals: { + ...globals.node, + ...globals.es2021, + ...globals.browser, + }, + ecmaVersion: 2021, + project: ["./tsconfig.json"], + tsconfigRootDir: __dirname, + }, + }, + plugins: { + "@typescript-eslint": typescript, + }, + 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/package.json b/starters/apps/library/package.json index ed7ab48d57b..ba2cb2261b7 100644 --- a/starters/apps/library/package.json +++ b/starters/apps/library/package.json @@ -37,8 +37,9 @@ "@types/eslint": "latest", "@types/node": "latest", "@typescript-eslint/eslint-plugin": "latest", - "@typescript-eslint/parser": "latest", + "typescript-eslint": "latest", "eslint": "latest", + "globals": "latest", "eslint-plugin-qwik": "latest", "np": "^8.0.4", "prettier": "latest",