diff --git a/apps/console/eslint.config.mjs b/apps/console/eslint.config.mjs index 882251634..971d03acd 100644 --- a/apps/console/eslint.config.mjs +++ b/apps/console/eslint.config.mjs @@ -2,10 +2,10 @@ import { configs } from "@probo/eslint-config"; import { defineConfig } from "eslint/config"; export default defineConfig([ - ...configs.base, - ...configs.ts, - ...configs.imports, - ...configs.react, + configs.base, + configs.ts, + configs.imports, + configs.react, + configs.stylistic, configs.languageOptions.browser, - ...configs.stylistic, ]); diff --git a/apps/trust/eslint.config.mjs b/apps/trust/eslint.config.mjs index 882251634..971d03acd 100644 --- a/apps/trust/eslint.config.mjs +++ b/apps/trust/eslint.config.mjs @@ -2,10 +2,10 @@ import { configs } from "@probo/eslint-config"; import { defineConfig } from "eslint/config"; export default defineConfig([ - ...configs.base, - ...configs.ts, - ...configs.imports, - ...configs.react, + configs.base, + configs.ts, + configs.imports, + configs.react, + configs.stylistic, configs.languageOptions.browser, - ...configs.stylistic, ]); diff --git a/packages/eslint-config/eslint.config.mjs b/packages/eslint-config/eslint.config.mjs index 21b0faded..8c192eca5 100644 --- a/packages/eslint-config/eslint.config.mjs +++ b/packages/eslint-config/eslint.config.mjs @@ -1,13 +1,15 @@ import { defineConfig } from "eslint/config"; import { baseConfigs } from "#baseConfigs"; -import { tsConfigs } from "#tsConfigs"; -import { nodeLanguageOptionsConfig } from "#languageOptionsConfigs"; +import { importsConfigs } from "#importsConfigs"; +import { nodeLanguageOptionsConfigs } from "#languageOptionsConfigs"; import { stylisticConfigs } from "#stylisticConfigs"; +import { tsConfigs } from "#tsConfigs"; export default defineConfig([ ...baseConfigs, ...tsConfigs, - nodeLanguageOptionsConfig, + ...importsConfigs, ...stylisticConfigs, + ...nodeLanguageOptionsConfigs, ]); diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index 6b23dff28..75cf4845e 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -13,6 +13,7 @@ "imports": { "#baseConfigs": "./src/baseConfigs.ts", "#tsConfigs": "./src/tsConfigs.ts", + "#importsConfigs": "./src/importsConfigs.ts", "#languageOptionsConfigs": "./src/languageOptionsConfigs.ts", "#stylisticConfigs": "./src/stylisticConfigs.ts" }, diff --git a/packages/eslint-config/src/baseConfigs.ts b/packages/eslint-config/src/baseConfigs.ts index 0955844e4..bf7b9f0db 100644 --- a/packages/eslint-config/src/baseConfigs.ts +++ b/packages/eslint-config/src/baseConfigs.ts @@ -1,7 +1,15 @@ import js from "@eslint/js"; -import type { Linter } from "eslint"; +import { globalIgnores } from "eslint/config"; +import type { FlatConfig } from "typescript-eslint"; -export const baseConfigs = [ - { ignores: ["dist", "node_modules", "**/*.d.ts"] } satisfies Pick, +export const baseConfigs: FlatConfig.ConfigArray = [ + { files: ["**/*.js", "**/*.mjs", "**/*.ts", "**/*.tsx"] }, + globalIgnores([ + ".turbo/", + "**/dist/", + "**/node_modules/", + "**/__generated__/", + "**/*.d.ts", + ]), js.configs.recommended, ]; diff --git a/packages/eslint-config/src/importsConfigs.ts b/packages/eslint-config/src/importsConfigs.ts index afba6dc6e..d31905c50 100644 --- a/packages/eslint-config/src/importsConfigs.ts +++ b/packages/eslint-config/src/importsConfigs.ts @@ -1,17 +1,10 @@ import { createTypeScriptImportResolver } from "eslint-import-resolver-typescript"; import { importX } from "eslint-plugin-import-x"; +import type { FlatConfig } from "typescript-eslint"; -export const importsConfigs = [ +export const importsConfigs: FlatConfig.ConfigArray = [ importX.flatConfigs.recommended, - { - ...importX.flatConfigs.typescript, - settings: { - "import-x/resolver-next": createTypeScriptImportResolver({ - alwaysTryTypes: true, - project: "tsconfig.json", - }), - }, - }, + importX.flatConfigs.typescript, { rules: { "import-x/order": [ @@ -37,5 +30,11 @@ export const importsConfigs = [ }, ], }, + settings: { + "import-x/resolver-next": createTypeScriptImportResolver({ + alwaysTryTypes: true, + project: "tsconfig.json", + }), + }, }, ]; diff --git a/packages/eslint-config/src/index.ts b/packages/eslint-config/src/index.ts index 3fc895d23..1d61c2440 100644 --- a/packages/eslint-config/src/index.ts +++ b/packages/eslint-config/src/index.ts @@ -1,18 +1,18 @@ import { baseConfigs } from "./baseConfigs.ts"; -import { browserLanguageOptionsConfig, nodeLanguageOptionsConfig } from "./languageOptionsConfigs.ts"; -import { tsConfigs } from "./tsConfigs.ts"; +import { importsConfigs } from "./importsConfigs.ts"; +import { browserLanguageOptionsConfigs, nodeLanguageOptionsConfigs } from "./languageOptionsConfigs.ts"; import { reactConfigs } from "./reactConfigs.ts"; import { stylisticConfigs } from "./stylisticConfigs.ts"; -import { importsConfigs } from "./importsConfigs.ts"; +import { tsConfigs } from "./tsConfigs.ts"; export const configs = { base: baseConfigs, imports: importsConfigs, ts: tsConfigs, - languageOptions: { - browser: browserLanguageOptionsConfig, - node: nodeLanguageOptionsConfig, - }, react: reactConfigs, stylistic: stylisticConfigs, + languageOptions: { + browser: browserLanguageOptionsConfigs, + node: nodeLanguageOptionsConfigs, + }, }; diff --git a/packages/eslint-config/src/languageOptionsConfigs.ts b/packages/eslint-config/src/languageOptionsConfigs.ts index c2834757d..db13de271 100644 --- a/packages/eslint-config/src/languageOptionsConfigs.ts +++ b/packages/eslint-config/src/languageOptionsConfigs.ts @@ -1,38 +1,42 @@ -import type { Linter } from "eslint"; -import * as globals from "globals"; +import globals from "globals"; +import type { FlatConfig } from "typescript-eslint"; -export const browserLanguageOptionsConfig = { - languageOptions: { - // Same as the ones we use in our tsconfig compilerOptions.lib for browser - ecmaVersion: 2022, - globals: { - ...globals.browser, - ...globals.es2022, - }, - sourceType: "module", - parserOptions: { - projectService: true, - ecmaFeatures: { - impliedStrict: true, +export const browserLanguageOptionsConfigs: FlatConfig.ConfigArray = [ + { + languageOptions: { + // Same as the ones we use in our tsconfig compilerOptions.lib for browser + ecmaVersion: 2022, + globals: { + ...globals.browser, + ...globals.es2022, + }, + sourceType: "module", + parserOptions: { + projectService: true, + ecmaFeatures: { + impliedStrict: true, + }, }, }, }, -} satisfies Pick; +]; -export const nodeLanguageOptionsConfig = { - languageOptions: { - // Same as the ones we use in our tsconfig compilerOptions.lib for node - ecmaVersion: 2023, - globals: { - ...globals.node, - ...globals.es2023, - }, - sourceType: "module", - parserOptions: { - projectService: true, - ecmaFeatures: { - impliedStrict: true, +export const nodeLanguageOptionsConfigs: FlatConfig.ConfigArray = [ + { + languageOptions: { + // Same as the ones we use in our tsconfig compilerOptions.lib for node + ecmaVersion: 2023, + globals: { + ...globals.node, + ...globals.es2023, + }, + sourceType: "module", + parserOptions: { + projectService: true, + ecmaFeatures: { + impliedStrict: true, + }, }, }, }, -} satisfies Pick; +]; diff --git a/packages/eslint-config/src/reactConfigs.ts b/packages/eslint-config/src/reactConfigs.ts index 27eaf4ff7..7bf1820a2 100644 --- a/packages/eslint-config/src/reactConfigs.ts +++ b/packages/eslint-config/src/reactConfigs.ts @@ -1,15 +1,16 @@ import react from "eslint-plugin-react"; -import * as reactHooks from "eslint-plugin-react-hooks"; +import reactHooks from "eslint-plugin-react-hooks"; +import type { FlatConfig } from "typescript-eslint"; -export const reactConfigs = [ +export const reactConfigs: FlatConfig.ConfigArray = [ { ...react.configs.flat.recommended, ...react.configs.flat["jsx-runtime"], - ...reactHooks.configs.flat.recommended, settings: { react: { version: "detect", }, }, }, + reactHooks.configs.flat.recommended, ]; diff --git a/packages/eslint-config/src/stylisticConfigs.ts b/packages/eslint-config/src/stylisticConfigs.ts index 068185b96..f2e379531 100644 --- a/packages/eslint-config/src/stylisticConfigs.ts +++ b/packages/eslint-config/src/stylisticConfigs.ts @@ -1,7 +1,7 @@ import stylistic from "@stylistic/eslint-plugin"; -import type { Linter } from "eslint"; +import type { FlatConfig } from "typescript-eslint"; -export const stylisticConfigs = [ +export const stylisticConfigs: FlatConfig.ConfigArray = [ stylistic.configs.customize({ arrowParens: false, // Will actually set it to "as-needed" blockSpacing: true, @@ -28,5 +28,5 @@ export const stylisticConfigs = [ }, ], }, - } satisfies Linter.Config, + }, ]; diff --git a/packages/eslint-config/src/tsConfigs.ts b/packages/eslint-config/src/tsConfigs.ts index 39a757dfd..11794ab59 100644 --- a/packages/eslint-config/src/tsConfigs.ts +++ b/packages/eslint-config/src/tsConfigs.ts @@ -1,10 +1,8 @@ -import type { Linter } from "eslint"; -import { configs } from "typescript-eslint"; +import { configs, type FlatConfig } from "typescript-eslint"; -export const tsConfigs = [ +export const tsConfigs: FlatConfig.ConfigArray = [ ...configs.recommendedTypeChecked, { - files: ["**/*.{ts,tsx}"], rules: { "@typescript-eslint/no-unused-vars": [ "error", @@ -19,10 +17,5 @@ export const tsConfigs = [ }, ], }, - languageOptions: { - parserOptions: { - projectService: true, - }, - }, - } satisfies Linter.Config, + }, ]; diff --git a/packages/ui/eslint.config.mjs b/packages/ui/eslint.config.mjs index 95079fc82..00b961684 100644 --- a/packages/ui/eslint.config.mjs +++ b/packages/ui/eslint.config.mjs @@ -2,19 +2,19 @@ import { configs } from "@probo/eslint-config"; import { defineConfig } from "eslint/config"; export default defineConfig([ - ...configs.base, - ...configs.ts, - ...configs.imports, - ...configs.react, - ...configs.stylistic, + configs.base, + configs.ts, + configs.imports, + configs.react, + configs.stylistic, { + extends: [configs.languageOptions.browser], ignores: ["./tailwind.config.js"], - ...configs.languageOptions.browser, }, { + extends: [configs.languageOptions.node], files: ["./tailwind.config.js"], languageOptions: { - ...configs.languageOptions.node.languageOptions, sourceType: "commonjs", }, },