From f3c4fe82180e12a48e3a01b908dd609e198466d1 Mon Sep 17 00:00:00 2001 From: Ben Rogers Date: Sat, 2 Nov 2024 02:12:43 +0000 Subject: [PATCH 1/2] chore: update eslint config for eslint 9 --- .eslintrc.cjs | 12 ------------ .prettierrc.js | 12 ++++++------ eslint.config.js | 24 ++++++++++++++++++++++++ package-lock.json | 47 +++++++++++++++++++++++++++++++++++------------ package.json | 7 +++---- vitest.config.ts | 2 +- 6 files changed, 69 insertions(+), 35 deletions(-) delete mode 100644 .eslintrc.cjs create mode 100644 eslint.config.js diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index 88898a0..0000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - root: true, - env: { browser: true, es2020: true }, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:react-hooks/recommended', - ], - ignorePatterns: ['dist', '.eslintrc.cjs'], - parser: '@typescript-eslint/parser', - plugins: ['react-refresh'], -}; diff --git a/.prettierrc.js b/.prettierrc.js index f7db6dc..6724878 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -1,7 +1,7 @@ -module.exports = { - trailingComma: "es5", - tabWidth: 2, - semi: true, - singleQuote: true, - useTabs: false, +export default { + trailingComma: 'es5', + tabWidth: 2, + semi: true, + singleQuote: true, + useTabs: false, }; diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..d0454ac --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,24 @@ +import reactRefresh from 'eslint-plugin-react-refresh'; +import reactHooks from 'eslint-plugin-react-hooks'; +import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'; +import eslintJs from '@eslint/js'; +import tseslint from 'typescript-eslint'; + +export default [ + eslintJs.configs.recommended, + eslintPluginPrettierRecommended, + tseslint.configs.eslintRecommended, + { + ignores: ['**/dist', '.prettierrc.js'], + }, + { + plugins: { + 'react-refresh': reactRefresh, + 'react-hooks': reactHooks, + }, + rules: reactHooks.configs.recommended.rules, // https://github.com/facebook/react/issues/28313 + languageOptions: { + parser: tseslint.parser, + }, + }, +]; diff --git a/package-lock.json b/package-lock.json index d38f07a..820605b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,13 +19,10 @@ "@testing-library/react": "^16.0.1", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", - "@typescript-eslint/eslint-plugin": "^8.12.2", - "@typescript-eslint/parser": "^8.12.2", "@vitejs/plugin-react": "^4.3.3", "@vitest/coverage-v8": "^2.1.4", "autoprefixer": "^10.4.20", "eslint": "^9.14.0", - "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react-hooks": "^5.0.0", "eslint-plugin-react-refresh": "^0.4.14", @@ -37,6 +34,7 @@ "stylelint": "^16.10.0", "stylelint-config-standard": "^36.0.1", "typescript": "^5.6.3", + "typescript-eslint": "^8.12.2", "vite": "^5.4.10", "vitest": "^2.1.4" } @@ -340,6 +338,15 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { "version": "7.26.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", @@ -5467,6 +5474,8 @@ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, + "optional": true, + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -6094,15 +6103,6 @@ "which": "bin/which" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -13569,6 +13569,29 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.12.2.tgz", + "integrity": "sha512-UbuVUWSrHVR03q9CWx+JDHeO6B/Hr9p4U5lRH++5tq/EbFq1faYZe50ZSBePptgfIKLEti0aPQ3hFgnPVcd8ZQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.12.2", + "@typescript-eslint/parser": "8.12.2", + "@typescript-eslint/utils": "8.12.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/uglify-js": { "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", diff --git a/package.json b/package.json index 371f71d..f21f7d3 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "react-typescript-template", "version": "1.0.0", "private": true, + "type": "module", "dependencies": { "react": "^18.3.1", "react-dom": "^18.3.1" @@ -14,13 +15,10 @@ "@testing-library/react": "^16.0.1", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", - "@typescript-eslint/eslint-plugin": "^8.12.2", - "@typescript-eslint/parser": "^8.12.2", "@vitejs/plugin-react": "^4.3.3", "@vitest/coverage-v8": "^2.1.4", "autoprefixer": "^10.4.20", "eslint": "^9.14.0", - "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react-hooks": "^5.0.0", "eslint-plugin-react-refresh": "^0.4.14", @@ -32,6 +30,7 @@ "stylelint": "^16.10.0", "stylelint-config-standard": "^36.0.1", "typescript": "^5.6.3", + "typescript-eslint": "^8.12.2", "vite": "^5.4.10", "vitest": "^2.1.4" }, @@ -42,7 +41,7 @@ "test": "vitest run", "test:ui": "vitest --ui", "test:watch": "vitest", - "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "lint": "eslint", "lint:style": "stylelint \"**/*.css\"", "version:bump": "semantic-release --extends=./.releaserc.json", "coverage": "vitest run --coverage", diff --git a/vitest.config.ts b/vitest.config.ts index e868bbd..8907797 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -9,7 +9,7 @@ export default defineConfig({ environment: 'jsdom', exclude: [...configDefaults.exclude], coverage: { - exclude: ['.prettierrc.js', '.eslintrc.cjs', 'src/index.tsx', 'vite*'], + exclude: ['.prettierrc.js', 'eslint.config.js', 'src/index.tsx', 'vite*'], reporter: ['text', 'json', 'json-summary'], thresholds: { lines: 80, From e22bf10c75cff4082870617dc93e722b74c08fbb Mon Sep 17 00:00:00 2001 From: Ben Rogers Date: Sat, 2 Nov 2024 02:16:49 +0000 Subject: [PATCH 2/2] chore: update coverage excludes --- vitest.config.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/vitest.config.ts b/vitest.config.ts index 8907797..e9e3880 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -9,7 +9,13 @@ export default defineConfig({ environment: 'jsdom', exclude: [...configDefaults.exclude], coverage: { - exclude: ['.prettierrc.js', 'eslint.config.js', 'src/index.tsx', 'vite*'], + exclude: [ + '.prettierrc.js', + 'eslint.config.js', + 'src/index.tsx', + 'vite*', + 'dist/*', + ], reporter: ['text', 'json', 'json-summary'], thresholds: { lines: 80,