diff --git a/.eslintrc.cjs b/.eslintrc.cjs index df23c3c..91047c1 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -3,7 +3,7 @@ module.exports = { browser: true, es2021: true, }, - plugins: ['@typescript-eslint', 'react', 'react-refresh'], + plugins: ['simple-import-sort', 'react', 'react-refresh', 'node-import'], extends: [ 'eslint:recommended', 'plugin:@typescript-eslint/strict-type-checked', @@ -68,6 +68,16 @@ module.exports = { 'warn', { allowConstantExport: true }, ], + + // stylistic + 'object-shorthand': ['error', 'always'], + 'func-style': ['error', 'expression'], + 'simple-import-sort/imports': 'error', + 'simple-import-sort/exports': 'error', + 'node-import/prefer-node-protocol': 'error', + 'import/consistent-type-specifier-style': ['error', 'prefer-inline'], + '@typescript-eslint/consistent-type-exports': 'error', + '@typescript-eslint/consistent-type-imports': 'error', }, ignorePatterns: [ 'node_modules/', diff --git a/e2e/app.spec.ts b/e2e/app.spec.ts index 3c9985c..50f8495 100644 --- a/e2e/app.spec.ts +++ b/e2e/app.spec.ts @@ -1,4 +1,4 @@ -import { test, expect } from '@playwright/test' +import { expect, test } from '@playwright/test' test('has title', async ({ page }) => { await page.goto('http://localhost:5173/') diff --git a/package.json b/package.json index 0891744..0c6d9a9 100644 --- a/package.json +++ b/package.json @@ -44,9 +44,11 @@ "eslint-plugin-jest": "27.6.0", "eslint-plugin-jest-dom": "5.1.0", "eslint-plugin-jsx-a11y": "6.8.0", + "eslint-plugin-node-import": "1.0.4", "eslint-plugin-react": "7.33.2", "eslint-plugin-react-hooks": "4.6.0", "eslint-plugin-react-refresh": "0.4.4", + "eslint-plugin-simple-import-sort": "10.0.0", "eslint-plugin-testing-library": "6.1.2", "gitzy": "4.0.0", "jsdom": "22.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 96f49f9..2b54b6e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -79,6 +79,9 @@ devDependencies: eslint-plugin-jsx-a11y: specifier: 6.8.0 version: 6.8.0(eslint@8.54.0) + eslint-plugin-node-import: + specifier: 1.0.4 + version: 1.0.4(eslint@8.54.0) eslint-plugin-react: specifier: 7.33.2 version: 7.33.2(eslint@8.54.0) @@ -88,6 +91,9 @@ devDependencies: eslint-plugin-react-refresh: specifier: 0.4.4 version: 0.4.4(eslint@8.54.0) + eslint-plugin-simple-import-sort: + specifier: 10.0.0 + version: 10.0.0(eslint@8.54.0) eslint-plugin-testing-library: specifier: 6.1.2 version: 6.1.2(eslint@8.54.0)(typescript@5.2.2) @@ -2079,6 +2085,15 @@ packages: object.fromentries: 2.0.7 dev: true + /eslint-plugin-node-import@1.0.4(eslint@8.54.0): + resolution: {integrity: sha512-nn6EkM7+vJCDCXZiM0FDpYSekbhlk5LNoHJm9DlVSucGrsT9WoK+qOxIEm+SwoFBeH73cMHMavioDaHsu22b0Q==} + engines: {node: ^14.18.0 || ^16.0.0 || >= 18.0.0} + peerDependencies: + eslint: '>=7' + dependencies: + eslint: 8.54.0 + dev: true + /eslint-plugin-react-hooks@4.6.0(eslint@8.54.0): resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} @@ -2121,6 +2136,14 @@ packages: string.prototype.matchall: 4.0.10 dev: true + /eslint-plugin-simple-import-sort@10.0.0(eslint@8.54.0): + resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} + peerDependencies: + eslint: '>=5.0.0' + dependencies: + eslint: 8.54.0 + dev: true + /eslint-plugin-testing-library@6.1.2(eslint@8.54.0)(typescript@5.2.2): resolution: {integrity: sha512-Ra16FeBlonfbScOIdZEta9o+OxtwDqiUt+4UCpIM42TuatyLdtfU/SbwnIzPcAszrbl58PGwyZ9YGU9dwIo/tA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} diff --git a/src/App.tsx b/src/App.tsx index 1ce2a82..e31ed50 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -6,7 +6,7 @@ import typeScriptLogo from './assets/typescript.svg' import viteLogo from './assets/vite.svg' import { Logo } from './components/Logo' -function App() { +export default function App() { const [count, setCount] = useState(0) return ( @@ -52,5 +52,3 @@ function App() { ) } - -export default App diff --git a/src/main.tsx b/src/main.tsx index 9f422d0..7e6e54b 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,8 +1,9 @@ +import './index.css' + import { StrictMode } from 'react' import { createRoot } from 'react-dom/client' import App from './App' -import './index.css' const root = document.getElementById('root') diff --git a/src/test/utils.tsx b/src/test/utils.tsx index 4731b67..c995af2 100644 --- a/src/test/utils.tsx +++ b/src/test/utils.tsx @@ -16,5 +16,5 @@ const customRender = (ui: React.ReactElement, options = {}) => { } } -export { screen, renderHook, within } from '@testing-library/react' +export { renderHook, screen, within } from '@testing-library/react' export { customRender as render } diff --git a/vite.config.ts b/vite.config.ts index 57eed8a..87ae078 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,4 +1,4 @@ -import path from 'path' +import path from 'node:path' import react from '@vitejs/plugin-react-swc' import { defineConfig } from 'vite'