diff --git a/apps/comments-ui/.eslintrc.js b/apps/comments-ui/.eslintrc.js deleted file mode 100644 index 27f82c3e80f..00000000000 --- a/apps/comments-ui/.eslintrc.js +++ /dev/null @@ -1,59 +0,0 @@ -/* eslint-env node */ -const tailwindConfig = `${__dirname}/tailwind.config.js`; - -module.exports = { - root: true, - extends: [ - 'plugin:ghost/ts', - 'plugin:react/recommended', - 'plugin:i18next/recommended' - ], - plugins: [ - 'ghost', - 'tailwindcss', - 'i18next' - ], - settings: { - react: { - version: 'detect' - } - }, - rules: { - // Sort multiple import lines into alphabetical groups - 'ghost/sort-imports-es6-autofix/sort-imports-es6': ['error', { - memberSyntaxSortOrder: ['none', 'all', 'single', 'multiple'] - }], - - // Enforce kebab-case (lowercase with hyphens) for all filenames - 'ghost/filenames/match-regex': ['error', '^[a-z0-9.-]+$', false], - - // TODO: fix + remove this - '@typescript-eslint/no-explicit-any': 'warn', - - // Suppress errors for missing 'import React' in JSX files, as we don't need it - 'react/react-in-jsx-scope': 'off', - // Ignore prop-types for now - 'react/prop-types': 'off', - - // custom react rules - 'react/jsx-sort-props': ['error', { - reservedFirst: true, - callbacksLast: true, - shorthandLast: true, - locale: 'en' - }], - 'react/button-has-type': 'error', - 'react/no-array-index-key': 'error', - - 'tailwindcss/classnames-order': ['error', {config: tailwindConfig}], - 'tailwindcss/enforces-negative-arbitrary-values': ['warn', {config: tailwindConfig}], - 'tailwindcss/enforces-shorthand': ['warn', {config: tailwindConfig}], - 'tailwindcss/migration-from-tailwind-2': ['warn', {config: tailwindConfig}], - 'tailwindcss/no-arbitrary-value': 'off', - 'tailwindcss/no-custom-classname': 'off', - 'tailwindcss/no-contradicting-classname': ['error', {config: tailwindConfig}], - - // This rule doesn't work correctly with TypeScript, and TypeScript has its own better version - 'no-undef': 'off' - } -}; diff --git a/apps/comments-ui/eslint.config.js b/apps/comments-ui/eslint.config.js new file mode 100644 index 00000000000..92f1751dc14 --- /dev/null +++ b/apps/comments-ui/eslint.config.js @@ -0,0 +1,91 @@ +import js from '@eslint/js'; +import globals from 'globals'; +import ghostPlugin from 'eslint-plugin-ghost'; +import reactPlugin from 'eslint-plugin-react'; +import i18nextPlugin from 'eslint-plugin-i18next'; +import tailwindcssPlugin from 'eslint-plugin-tailwindcss'; +import tseslint from 'typescript-eslint'; + +const tailwindConfig = `${import.meta.dirname}/tailwind.config.js`; + +const ghostRules = { + curly: 'error', + camelcase: ['error', {properties: 'never'}], + 'dot-notation': 'error', + eqeqeq: ['error', 'always'], + 'no-plusplus': ['error', {allowForLoopAfterthoughts: true}], + 'no-eval': 'error', + 'no-useless-call': 'error', + 'no-console': 'error', + 'no-shadow': 'error', + 'array-callback-return': 'error', + 'no-constructor-return': 'error', + 'no-promise-executor-return': 'error', + 'no-unused-vars': 'off', + '@typescript-eslint/no-unused-vars': ['error', { + args: 'after-used', + argsIgnorePattern: '^_', + caughtErrors: 'none' + }], + 'ghost/filenames/match-regex': ['error', '^[a-z0-9.-]+$', false], + 'ghost/sort-imports-es6-autofix/sort-imports-es6': ['error', { + memberSyntaxSortOrder: ['none', 'all', 'single', 'multiple'] + }] +}; + +const reactFlat = reactPlugin.configs.flat.recommended; +const i18nextFlat = i18nextPlugin.configs['flat/recommended']; + +export default tseslint.config( + { + ignores: ['umd/**/*', 'dist/**/*'] + }, + { + files: ['src/**/*.{js,jsx,ts,tsx}'], + extends: [...tseslint.configs.recommended], + languageOptions: { + ...reactFlat.languageOptions, + ecmaVersion: 2022, + sourceType: 'module', + globals: { + ...globals.browser, + ...globals.node + } + }, + plugins: { + ...reactFlat.plugins, + ...i18nextFlat.plugins, + ghost: ghostPlugin, + tailwindcss: tailwindcssPlugin + }, + settings: { + react: {version: 'detect'} + }, + rules: { + ...js.configs.recommended.rules, + ...reactFlat.rules, + ...i18nextFlat.rules, + ...ghostRules, + '@typescript-eslint/no-inferrable-types': 'off', + '@typescript-eslint/no-explicit-any': 'warn', + 'react/react-in-jsx-scope': 'off', + 'react/prop-types': 'off', + 'react/jsx-sort-props': ['error', { + reservedFirst: true, + callbacksLast: true, + shorthandLast: true, + locale: 'en' + }], + 'react/button-has-type': 'error', + 'react/no-array-index-key': 'error', + 'tailwindcss/classnames-order': ['error', {config: tailwindConfig}], + 'tailwindcss/enforces-negative-arbitrary-values': ['warn', {config: tailwindConfig}], + 'tailwindcss/enforces-shorthand': ['warn', {config: tailwindConfig}], + 'tailwindcss/migration-from-tailwind-2': ['warn', {config: tailwindConfig}], + 'tailwindcss/no-arbitrary-value': 'off', + 'tailwindcss/no-custom-classname': 'off', + 'tailwindcss/no-contradicting-classname': ['error', {config: tailwindConfig}], + 'no-undef': 'off' + } + } +); diff --git a/apps/comments-ui/package.json b/apps/comments-ui/package.json index 8d8a3e2d627..908b0838de5 100644 --- a/apps/comments-ui/package.json +++ b/apps/comments-ui/package.json @@ -1,6 +1,7 @@ { "name": "@tryghost/comments-ui", - "version": "1.5.12", + "type": "module", + "version": "1.5.13", "license": "MIT", "repository": "https://github.com/TryGhost/Ghost", "author": "Ghost Foundation", @@ -25,7 +26,7 @@ "test:acceptance": "NODE_OPTIONS='--experimental-specifier-resolution=node --no-warnings' VITE_TEST=true playwright test", "test:acceptance:slowmo": "TIMEOUT=100000 PLAYWRIGHT_SLOWMO=1000 pnpm test:acceptance --headed", "test:acceptance:full": "ALL_BROWSERS=1 pnpm test:acceptance", - "lint": "eslint src --ext .js,.ts,.jsx,.tsx --cache", + "lint": "eslint src --cache", "preship": "pnpm lint", "ship": "node ../../.github/scripts/release-apps.js", "prepublishOnly": "pnpm build" @@ -61,6 +62,7 @@ "react-string-replace": "2.0.1" }, "devDependencies": { + "@eslint/js": "catalog:eslint9", "@playwright/test": "catalog:", "@testing-library/jest-dom": "catalog:", "@testing-library/react": "catalog:react17", @@ -71,10 +73,14 @@ "autoprefixer": "10.5.0", "bson-objectid": "catalog:", "concurrently": "catalog:", - "eslint": "catalog:", + "eslint": "catalog:eslint9", + "eslint-plugin-ghost": "3.5.0", "eslint-plugin-i18next": "6.1.4", + "eslint-plugin-react": "7.37.5", "eslint-plugin-tailwindcss": "catalog:tailwind3", + "globals": "17.6.0", "jsdom": "catalog:", + "typescript-eslint": "8.58.0", "moment": "2.30.1", "postcss": "catalog:", "postcss-import": "16.1.1", diff --git a/apps/comments-ui/test/utils/e2e.ts b/apps/comments-ui/test/utils/e2e.ts index 13b56ffa6a0..e28c5b307bd 100644 --- a/apps/comments-ui/test/utils/e2e.ts +++ b/apps/comments-ui/test/utils/e2e.ts @@ -1,3 +1,4 @@ +import os from 'node:os'; import {E2E_PORT} from '../../playwright.config'; import {Locator, Page} from '@playwright/test'; import {MockedApi} from './mocked-api'; @@ -224,7 +225,6 @@ export async function setClipboard(page, text) { } export function getModifierKey() { - const os = require('os'); // eslint-disable-line @typescript-eslint/no-var-requires const platform = os.platform(); if (platform === 'darwin') { return 'Meta'; diff --git a/apps/signup-form/.eslintrc.cjs b/apps/signup-form/.eslintrc.cjs deleted file mode 100644 index 984819b6c6e..00000000000 --- a/apps/signup-form/.eslintrc.cjs +++ /dev/null @@ -1,51 +0,0 @@ -/* eslint-env node */ -const tailwindConfig = `${__dirname}/tailwind.config.cjs`; - -module.exports = { - root: true, - extends: [ - 'plugin:ghost/ts', - 'plugin:react/recommended' - ], - plugins: [ - 'ghost', - 'tailwindcss' - ], - settings: { - react: { - version: 'detect' - } - }, - rules: { - // Sort multiple import lines into alphabetical groups - 'ghost/sort-imports-es6-autofix/sort-imports-es6': ['error', { - memberSyntaxSortOrder: ['none', 'all', 'single', 'multiple'] - }], - - // Enforce kebab-case (lowercase with hyphens) for all filenames - 'ghost/filenames/match-regex': ['error', '^[a-z0-9.-]+$', false], - - // Suppress errors for missing 'import React' in JSX files, as we don't need it - 'react/react-in-jsx-scope': 'off', - // Ignore prop-types for now - 'react/prop-types': 'off', - - // Custom react rules - 'react/jsx-sort-props': ['error', { - reservedFirst: true, - callbacksLast: true, - shorthandLast: true, - locale: 'en' - }], - 'react/button-has-type': 'error', - 'react/no-array-index-key': 'error', - - 'tailwindcss/classnames-order': ['error', {config: tailwindConfig}], - 'tailwindcss/enforces-negative-arbitrary-values': ['warn', {config: tailwindConfig}], - 'tailwindcss/enforces-shorthand': ['warn', {config: tailwindConfig}], - 'tailwindcss/migration-from-tailwind-2': ['warn', {config: tailwindConfig}], - 'tailwindcss/no-arbitrary-value': 'off', - 'tailwindcss/no-custom-classname': 'off', - 'tailwindcss/no-contradicting-classname': ['error', {config: tailwindConfig}] - } -}; diff --git a/apps/signup-form/eslint.config.js b/apps/signup-form/eslint.config.js new file mode 100644 index 00000000000..8333005d614 --- /dev/null +++ b/apps/signup-form/eslint.config.js @@ -0,0 +1,85 @@ +import js from '@eslint/js'; +import globals from 'globals'; +import ghostPlugin from 'eslint-plugin-ghost'; +import reactPlugin from 'eslint-plugin-react'; +import tailwindcssPlugin from 'eslint-plugin-tailwindcss'; +import tseslint from 'typescript-eslint'; + +const tailwindConfig = `${import.meta.dirname}/tailwind.config.cjs`; + +const ghostRules = { + curly: 'error', + camelcase: ['error', {properties: 'never'}], + 'dot-notation': 'error', + eqeqeq: ['error', 'always'], + 'no-plusplus': ['error', {allowForLoopAfterthoughts: true}], + 'no-eval': 'error', + 'no-useless-call': 'error', + 'no-console': 'error', + 'no-shadow': 'error', + 'array-callback-return': 'error', + 'no-constructor-return': 'error', + 'no-promise-executor-return': 'error', + 'no-unused-vars': 'off', + '@typescript-eslint/no-unused-vars': ['error', { + args: 'after-used', + argsIgnorePattern: '^_', + caughtErrors: 'none' + }], + 'ghost/filenames/match-regex': ['error', '^[a-z0-9.-]+$', false], + 'ghost/sort-imports-es6-autofix/sort-imports-es6': ['error', { + memberSyntaxSortOrder: ['none', 'all', 'single', 'multiple'] + }] +}; + +const reactFlat = reactPlugin.configs.flat.recommended; + +export default tseslint.config( + { + ignores: ['umd/**/*', 'dist/**/*', 'storybook-static/**/*'] + }, + { + files: ['src/**/*.{js,jsx,ts,tsx,cjs}', 'test/**/*.{js,jsx,ts,tsx,cjs}'], + extends: [...tseslint.configs.recommended], + languageOptions: { + ...reactFlat.languageOptions, + ecmaVersion: 2022, + sourceType: 'module', + globals: { + ...globals.browser, + ...globals.node + } + }, + plugins: { + ...reactFlat.plugins, + ghost: ghostPlugin, + tailwindcss: tailwindcssPlugin + }, + settings: { + react: {version: 'detect'} + }, + rules: { + ...js.configs.recommended.rules, + ...reactFlat.rules, + ...ghostRules, + '@typescript-eslint/no-inferrable-types': 'off', + 'react/react-in-jsx-scope': 'off', + 'react/prop-types': 'off', + 'react/jsx-sort-props': ['error', { + reservedFirst: true, + callbacksLast: true, + shorthandLast: true, + locale: 'en' + }], + 'react/button-has-type': 'error', + 'react/no-array-index-key': 'error', + 'tailwindcss/classnames-order': ['error', {config: tailwindConfig}], + 'tailwindcss/enforces-negative-arbitrary-values': ['warn', {config: tailwindConfig}], + 'tailwindcss/enforces-shorthand': ['warn', {config: tailwindConfig}], + 'tailwindcss/migration-from-tailwind-2': ['warn', {config: tailwindConfig}], + 'tailwindcss/no-arbitrary-value': 'off', + 'tailwindcss/no-custom-classname': 'off', + 'tailwindcss/no-contradicting-classname': ['error', {config: tailwindConfig}] + } + } +); diff --git a/apps/signup-form/package.json b/apps/signup-form/package.json index 4ecbafe8a6c..33f48ec4889 100644 --- a/apps/signup-form/package.json +++ b/apps/signup-form/package.json @@ -1,6 +1,7 @@ { "name": "@tryghost/signup-form", - "version": "0.3.27", + "type": "module", + "version": "0.3.28", "license": "MIT", "repository": "https://github.com/TryGhost/Ghost", "author": "Ghost Foundation", @@ -19,7 +20,7 @@ "dev:test": "vite build && vite preview --port 6175", "build": "tsc && vite build", "lint": "pnpm run lint:js", - "lint:js": "eslint --ext .js,.ts,.cjs,.tsx --cache src test", + "lint:js": "eslint --cache src test", "test:acceptance": "NODE_OPTIONS='--experimental-specifier-resolution=node --no-warnings' VITE_TEST=true playwright test", "test:acceptance:slowmo": "TIMEOUT=100000 PLAYWRIGHT_SLOWMO=100 pnpm test:acceptance --headed", "test:acceptance:full": "ALL_BROWSERS=1 pnpm test:acceptance", @@ -35,6 +36,7 @@ "react-dom": "catalog:" }, "devDependencies": { + "@eslint/js": "catalog:eslint9", "@playwright/test": "catalog:", "@storybook/addon-docs": "catalog:", "@storybook/addon-links": "catalog:", @@ -46,9 +48,13 @@ "@vitejs/plugin-react": "catalog:", "autoprefixer": "10.5.0", "concurrently": "catalog:", - "eslint": "catalog:", + "eslint": "catalog:eslint9", + "eslint-plugin-ghost": "3.5.0", + "eslint-plugin-react": "7.37.5", "eslint-plugin-tailwindcss": "catalog:tailwind3", + "globals": "17.6.0", "jsdom": "catalog:", + "typescript-eslint": "8.58.0", "postcss": "catalog:", "postcss-import": "16.1.1", "storybook": "catalog:", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b97ad7ef1a5..188e069ef0e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1224,6 +1224,9 @@ importers: specifier: 2.0.1 version: 2.0.1 devDependencies: + '@eslint/js': + specifier: catalog:eslint9 + version: 9.39.4 '@playwright/test': specifier: 'catalog:' version: 1.60.0 @@ -1255,14 +1258,23 @@ importers: specifier: 'catalog:' version: 10.0.3 eslint: - specifier: 'catalog:' - version: 8.57.1 + specifier: catalog:eslint9 + version: 9.39.4(jiti@1.21.7) + eslint-plugin-ghost: + specifier: 3.5.0 + version: 3.5.0(@babel/core@7.29.7)(eslint@9.39.4(jiti@1.21.7)) eslint-plugin-i18next: specifier: 6.1.4 version: 6.1.4 + eslint-plugin-react: + specifier: 7.37.5 + version: 7.37.5(eslint@9.39.4(jiti@1.21.7)) eslint-plugin-tailwindcss: specifier: catalog:tailwind3 version: 3.18.3(tailwindcss@3.4.19(tsx@4.22.4)(yaml@2.9.0)) + globals: + specifier: 17.6.0 + version: 17.6.0 jsdom: specifier: 'catalog:' version: 29.1.1(@noble/hashes@1.8.0) @@ -1281,6 +1293,9 @@ importers: tailwindcss: specifier: catalog:tailwind3 version: 3.4.19(tsx@4.22.4)(yaml@2.9.0) + typescript-eslint: + specifier: 8.58.0 + version: 8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) vite: specifier: 'catalog:' version: 7.3.2(@types/node@25.9.1)(jiti@1.21.7)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) @@ -1738,6 +1753,9 @@ importers: specifier: 'catalog:' version: 18.3.1(react@18.3.1) devDependencies: + '@eslint/js': + specifier: catalog:eslint9 + version: 9.39.4 '@playwright/test': specifier: 'catalog:' version: 1.60.0 @@ -1772,11 +1790,20 @@ importers: specifier: 'catalog:' version: 10.0.3 eslint: - specifier: 'catalog:' - version: 8.57.1 + specifier: catalog:eslint9 + version: 9.39.4(jiti@2.7.0) + eslint-plugin-ghost: + specifier: 3.5.0 + version: 3.5.0(@babel/core@7.29.7)(eslint@9.39.4(jiti@2.7.0)) + eslint-plugin-react: + specifier: 7.37.5 + version: 7.37.5(eslint@9.39.4(jiti@2.7.0)) eslint-plugin-tailwindcss: specifier: catalog:tailwind3 version: 3.18.3(tailwindcss@3.4.19(tsx@4.22.4)(yaml@2.9.0)) + globals: + specifier: 17.6.0 + version: 17.6.0 jsdom: specifier: 'catalog:' version: 29.1.1(@noble/hashes@1.8.0) @@ -1792,6 +1819,9 @@ importers: tailwindcss: specifier: catalog:tailwind3 version: 3.4.19(tsx@4.22.4)(yaml@2.9.0) + typescript-eslint: + specifier: 8.58.0 + version: 8.58.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) vite: specifier: 'catalog:' version: 7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) @@ -22674,6 +22704,14 @@ snapshots: eslint-visitor-keys: 2.1.0 semver: 6.3.1 + '@babel/eslint-parser@7.28.6(@babel/core@7.29.7)(eslint@9.39.4(jiti@1.21.7))': + dependencies: + '@babel/core': 7.29.7 + '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 + eslint: 9.39.4(jiti@1.21.7) + eslint-visitor-keys: 2.1.0 + semver: 6.3.1 + '@babel/eslint-parser@7.28.6(@babel/core@7.29.7)(eslint@9.39.4(jiti@2.7.0))': dependencies: '@babel/core': 7.29.7 @@ -24603,6 +24641,11 @@ snapshots: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@1.21.7))': + dependencies: + eslint: 9.39.4(jiti@1.21.7) + eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.7.0))': dependencies: eslint: 9.39.4(jiti@2.7.0) @@ -29953,6 +29996,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.56.1(eslint@8.57.1)(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.56.1(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.49.0 + '@typescript-eslint/type-utils': 8.49.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/utils': 8.49.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.49.0 + eslint: 9.39.4(jiti@1.21.7) + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.56.1(eslint@8.57.1)(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 @@ -29985,6 +30044,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/type-utils': 8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.58.0 + eslint: 9.39.4(jiti@1.21.7) + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 @@ -30037,6 +30112,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.56.1(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.56.1 + debug: 4.4.3(supports-color@5.5.0) + eslint: 9.39.4(jiti@1.21.7) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/parser@8.56.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.56.1 @@ -30061,6 +30148,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.58.0 + debug: 4.4.3(supports-color@5.5.0) + eslint: 9.39.4(jiti@1.21.7) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.58.0 @@ -30157,6 +30256,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.49.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.49.0 + '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.49.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + debug: 4.4.3(supports-color@5.5.0) + eslint: 9.39.4(jiti@1.21.7) + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/type-utils@8.49.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.49.0 @@ -30181,6 +30292,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + debug: 4.4.3(supports-color@5.5.0) + eslint: 9.39.4(jiti@1.21.7) + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/type-utils@8.58.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.58.0 @@ -30272,6 +30395,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.49.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.7)) + '@typescript-eslint/scope-manager': 8.49.0 + '@typescript-eslint/types': 8.49.0 + '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3) + eslint: 9.39.4(jiti@1.21.7) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@8.49.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) @@ -30294,6 +30428,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.7)) + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3) + eslint: 9.39.4(jiti@1.21.7) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@8.58.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) @@ -35416,6 +35561,23 @@ snapshots: - eslint - typescript + ember-eslint-parser@0.5.13(@babel/core@7.29.7)(@typescript-eslint/parser@8.56.1(eslint@8.57.1)(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3): + dependencies: + '@babel/core': 7.29.7 + '@babel/eslint-parser': 7.28.6(@babel/core@7.29.7)(eslint@9.39.4(jiti@1.21.7)) + '@glimmer/syntax': 0.95.0 + '@typescript-eslint/tsconfig-utils': 8.60.0(typescript@5.9.3) + content-tag: 2.0.3 + eslint-scope: 7.2.2 + html-tags: 3.3.1 + mathml-tag-names: 2.1.3 + svg-tags: 1.0.0 + optionalDependencies: + '@typescript-eslint/parser': 8.56.1(eslint@8.57.1)(typescript@5.9.3) + transitivePeerDependencies: + - eslint + - typescript + ember-eslint-parser@0.5.13(@babel/core@7.29.7)(@typescript-eslint/parser@8.56.1(eslint@8.57.1)(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3): dependencies: '@babel/core': 7.29.7 @@ -36274,6 +36436,11 @@ snapshots: eslint: 8.57.1 semver: 7.8.4 + eslint-compat-utils@0.5.1(eslint@9.39.4(jiti@1.21.7)): + dependencies: + eslint: 9.39.4(jiti@1.21.7) + semver: 7.8.4 + eslint-compat-utils@0.5.1(eslint@9.39.4(jiti@2.7.0)): dependencies: eslint: 9.39.4(jiti@2.7.0) @@ -36305,6 +36472,25 @@ snapshots: - '@babel/core' - typescript + eslint-plugin-ember@12.7.5(@babel/core@7.29.7)(@typescript-eslint/parser@8.56.1(eslint@8.57.1)(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3): + dependencies: + '@ember-data/rfc395-data': 0.0.4 + css-tree: 3.2.1 + ember-eslint-parser: 0.5.13(@babel/core@7.29.7)(@typescript-eslint/parser@8.56.1(eslint@8.57.1)(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + ember-rfc176-data: 0.3.18 + eslint: 9.39.4(jiti@1.21.7) + eslint-utils: 3.0.0(eslint@9.39.4(jiti@1.21.7)) + estraverse: 5.3.0 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + requireindex: 1.2.0 + snake-case: 3.0.4 + optionalDependencies: + '@typescript-eslint/parser': 8.56.1(eslint@8.57.1)(typescript@5.9.3) + transitivePeerDependencies: + - '@babel/core' + - typescript + eslint-plugin-ember@12.7.5(@babel/core@7.29.7)(@typescript-eslint/parser@8.56.1(eslint@8.57.1)(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3): dependencies: '@ember-data/rfc395-data': 0.0.4 @@ -36331,6 +36517,13 @@ snapshots: eslint: 8.57.1 eslint-compat-utils: 0.5.1(eslint@8.57.1) + eslint-plugin-es-x@7.8.0(eslint@9.39.4(jiti@1.21.7)): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.7)) + '@eslint-community/regexpp': 4.12.2 + eslint: 9.39.4(jiti@1.21.7) + eslint-compat-utils: 0.5.1(eslint@9.39.4(jiti@1.21.7)) + eslint-plugin-es-x@7.8.0(eslint@9.39.4(jiti@2.7.0)): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) @@ -36346,6 +36539,14 @@ snapshots: lodash.snakecase: 4.1.1 lodash.upperfirst: 4.3.1 + eslint-plugin-filenames-ts@1.3.2(eslint@9.39.4(jiti@1.21.7)): + dependencies: + eslint: 9.39.4(jiti@1.21.7) + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.upperfirst: 4.3.1 + eslint-plugin-filenames-ts@1.3.2(eslint@9.39.4(jiti@2.7.0)): dependencies: eslint: 9.39.4(jiti@2.7.0) @@ -36371,6 +36572,23 @@ snapshots: - '@babel/core' - supports-color + eslint-plugin-ghost@3.5.0(@babel/core@7.29.7)(eslint@9.39.4(jiti@1.21.7)): + dependencies: + '@kapouer/eslint-plugin-no-return-in-loop': 1.0.0 + '@typescript-eslint/eslint-plugin': 8.49.0(@typescript-eslint/parser@8.56.1(eslint@8.57.1)(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.1(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + eslint: 9.39.4(jiti@1.21.7) + eslint-plugin-ember: 12.7.5(@babel/core@7.29.7)(@typescript-eslint/parser@8.56.1(eslint@8.57.1)(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + eslint-plugin-filenames-ts: 1.3.2(eslint@9.39.4(jiti@1.21.7)) + eslint-plugin-mocha: 7.0.1(eslint@9.39.4(jiti@1.21.7)) + eslint-plugin-n: 17.24.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + eslint-plugin-sort-imports-es6-autofix: 0.6.0(eslint@9.39.4(jiti@1.21.7)) + eslint-plugin-unicorn: 42.0.0(eslint@9.39.4(jiti@1.21.7)) + typescript: 5.9.3 + transitivePeerDependencies: + - '@babel/core' + - supports-color + eslint-plugin-ghost@3.5.0(@babel/core@7.29.7)(eslint@9.39.4(jiti@2.7.0)): dependencies: '@kapouer/eslint-plugin-no-return-in-loop': 1.0.0 @@ -36399,6 +36617,12 @@ snapshots: eslint-utils: 2.1.0 ramda: 0.27.2 + eslint-plugin-mocha@7.0.1(eslint@9.39.4(jiti@1.21.7)): + dependencies: + eslint: 9.39.4(jiti@1.21.7) + eslint-utils: 2.1.0 + ramda: 0.27.2 + eslint-plugin-mocha@7.0.1(eslint@9.39.4(jiti@2.7.0)): dependencies: eslint: 9.39.4(jiti@2.7.0) @@ -36420,6 +36644,21 @@ snapshots: transitivePeerDependencies: - typescript + eslint-plugin-n@17.24.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.7)) + enhanced-resolve: 5.22.0 + eslint: 9.39.4(jiti@1.21.7) + eslint-plugin-es-x: 7.8.0(eslint@9.39.4(jiti@1.21.7)) + get-tsconfig: 4.14.0 + globals: 15.15.0 + globrex: 0.1.2 + ignore: 5.3.2 + semver: 7.8.4 + ts-declaration-location: 1.0.7(typescript@5.9.3) + transitivePeerDependencies: + - typescript + eslint-plugin-n@17.24.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) @@ -36480,6 +36719,28 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 + eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@1.21.7)): + dependencies: + array-includes: 3.1.9 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.3.2 + eslint: 9.39.4(jiti@1.21.7) + estraverse: 5.3.0 + hasown: 2.0.4 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.5 + object.entries: 1.1.9 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.7 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.7.0)): dependencies: array-includes: 3.1.9 @@ -36506,6 +36767,10 @@ snapshots: dependencies: eslint: 8.57.1 + eslint-plugin-sort-imports-es6-autofix@0.6.0(eslint@9.39.4(jiti@1.21.7)): + dependencies: + eslint: 9.39.4(jiti@1.21.7) + eslint-plugin-sort-imports-es6-autofix@0.6.0(eslint@9.39.4(jiti@2.7.0)): dependencies: eslint: 9.39.4(jiti@2.7.0) @@ -36553,6 +36818,24 @@ snapshots: semver: 7.8.4 strip-indent: 3.0.0 + eslint-plugin-unicorn@42.0.0(eslint@9.39.4(jiti@1.21.7)): + dependencies: + '@babel/helper-validator-identifier': 7.29.7 + ci-info: 3.9.0 + clean-regexp: 1.0.0 + eslint: 9.39.4(jiti@1.21.7) + eslint-utils: 3.0.0(eslint@9.39.4(jiti@1.21.7)) + esquery: 1.7.0 + indent-string: 4.0.0 + is-builtin-module: 3.2.1 + lodash: 4.18.1 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.27 + safe-regex: 2.1.1 + semver: 7.8.4 + strip-indent: 3.0.0 + eslint-plugin-unicorn@42.0.0(eslint@9.39.4(jiti@2.7.0)): dependencies: '@babel/helper-validator-identifier': 7.29.7 @@ -36602,6 +36885,11 @@ snapshots: eslint: 8.57.1 eslint-visitor-keys: 2.1.0 + eslint-utils@3.0.0(eslint@9.39.4(jiti@1.21.7)): + dependencies: + eslint: 9.39.4(jiti@1.21.7) + eslint-visitor-keys: 2.1.0 + eslint-utils@3.0.0(eslint@9.39.4(jiti@2.7.0)): dependencies: eslint: 9.39.4(jiti@2.7.0) @@ -36660,6 +36948,47 @@ snapshots: transitivePeerDependencies: - supports-color + eslint@9.39.4(jiti@1.21.7): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.7)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.2 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.5 + '@eslint/js': 9.39.4 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.9 + ajv: 6.15.0 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3(supports-color@5.5.0) + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 1.21.7 + transitivePeerDependencies: + - supports-color + eslint@9.39.4(jiti@2.7.0): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) @@ -46133,6 +46462,17 @@ snapshots: transitivePeerDependencies: - supports-color + typescript-eslint@8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/parser': 8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + eslint: 9.39.4(jiti@1.21.7) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + typescript-eslint@8.58.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3): dependencies: '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)