Skip to content

Commit 5d5b484

Browse files
committed
refactor: replace import with import-x
1 parent 89a0a5d commit 5d5b484

File tree

3 files changed

+206
-99
lines changed

3 files changed

+206
-99
lines changed

eslint.config.mjs

Lines changed: 37 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,35 @@
11
// @ts-check
22

3-
import { fixupConfigRules } from '@eslint/compat';
4-
import { FlatCompat } from '@eslint/eslintrc';
53
import js from '@eslint/js';
64
import { defineConfig, globalIgnores } from 'eslint/config';
75
import prettierConfig from 'eslint-config-prettier/flat';
6+
import { importX } from 'eslint-plugin-import-x';
87
import jest from 'eslint-plugin-jest';
98
import * as jestFormatting from 'eslint-plugin-jest-formatting';
109
import globals from 'globals';
1110
import tseslint from 'typescript-eslint';
1211

13-
const compat = new FlatCompat({
14-
baseDirectory: import.meta.dirname,
15-
});
16-
1712
const config = defineConfig(
1813
js.configs.recommended,
1914
tseslint.configs.recommendedTypeChecked,
15+
importX.flatConfigs.recommended,
16+
importX.flatConfigs.typescript,
2017
{
2118
name: 'Language options',
19+
files: ['**/*.{js,mjs,cjs,ts,mts}'],
2220
languageOptions: {
2321
globals: {
2422
...globals.node,
2523
},
24+
ecmaVersion: 'latest',
25+
sourceType: 'module',
2626
parser: tseslint.parser,
2727
parserOptions: {
2828
projectService: true,
2929
tsconfigRootDir: import.meta.dirname,
3030
},
3131
},
3232
},
33-
{
34-
// TODO: replace import with import-x
35-
name: 'Import plugin config',
36-
extends: fixupConfigRules(compat.extends('plugin:import/recommended')),
37-
38-
rules: {
39-
'import/order': [
40-
'warn',
41-
{
42-
groups: ['builtin', 'external', 'parent', 'sibling', 'index'],
43-
'newlines-between': 'always',
44-
45-
alphabetize: {
46-
order: 'asc',
47-
caseInsensitive: false,
48-
},
49-
},
50-
],
51-
52-
'import/first': 'error',
53-
'import/no-empty-named-blocks': 'error',
54-
'import/no-extraneous-dependencies': 'error',
55-
'import/no-mutable-exports': 'error',
56-
'import/no-named-default': 'error',
57-
'import/no-relative-packages': 'warn',
58-
},
59-
},
6033
{
6134
name: 'Rules overrides for all files',
6235
rules: {
@@ -72,49 +45,40 @@ const config = defineConfig(
7245
},
7346
],
7447
'@typescript-eslint/no-use-before-define': 'off',
48+
49+
// Import
50+
'import-x/order': [
51+
'warn',
52+
{
53+
groups: ['builtin', 'external', 'parent', 'sibling', 'index'],
54+
'newlines-between': 'always',
55+
56+
alphabetize: {
57+
order: 'asc',
58+
caseInsensitive: false,
59+
},
60+
},
61+
],
62+
'import-x/first': 'error',
63+
'import-x/no-empty-named-blocks': 'error',
64+
'import-x/no-extraneous-dependencies': 'error',
65+
'import-x/no-mutable-exports': 'error',
66+
'import-x/no-named-default': 'error',
67+
'import-x/no-relative-packages': 'warn',
7568
},
7669
},
7770
{
78-
name: 'Rule overrides for TypeScript files',
79-
files: ['**/*.ts', '**/*.mts'],
71+
name: 'Rule overrides only for TypeScript files',
72+
files: ['**/*.{ts,mts}'],
8073
rules: {
81-
// Import
82-
// Rules enabled by `import/recommended` but are better handled by
83-
// TypeScript and @typescript-eslint.
84-
'import/default': 'off',
85-
'import/export': 'off',
86-
'import/namespace': 'off',
87-
'import/no-unresolved': 'off',
74+
// Rules enabled by `import-x/recommended` but are better handled by
75+
// TypeScript and typescript-eslint.
76+
'import-x/default': 'off',
77+
'import-x/export': 'off',
78+
'import-x/namespace': 'off',
79+
'import-x/no-unresolved': 'off',
8880
},
8981
},
90-
// {
91-
// files: ['**/*.ts'],
92-
//
93-
// extends: fixupConfigRules(
94-
// compat.extends(
95-
// 'plugin:import/typescript'
96-
// )
97-
// ),
98-
//
99-
// rules: {
100-
// 'import/default': 'off',
101-
// 'import/export': 'off',
102-
// 'import/namespace': 'off',
103-
// 'import/no-unresolved': 'off',
104-
// },
105-
//
106-
// settings: {
107-
// 'import/resolver': {
108-
// node: {
109-
// extensions: ['.js', '.ts'],
110-
// },
111-
//
112-
// typescript: {
113-
// alwaysTryTypes: true,
114-
// },
115-
// },
116-
// },
117-
// },
11882
{
11983
name: 'Jest config',
12084
files: ['**/*.test.ts', '**/*.test.js'],
@@ -123,15 +87,15 @@ const config = defineConfig(
12387
},
12488
{
12589
name: 'Plain JS',
126-
files: ['**/*.js', '**/*.mjs', '**/*.cjs'],
90+
files: ['**/*.{js,mjs,cjs}'],
12791
extends: [tseslint.configs.disableTypeChecked],
12892
},
12993
{
13094
name: 'Config files',
131-
files: ['./*.js', './*.cjs', './*.mjs', '**/*.config.*js'],
95+
files: ['**/*rc*.{js,mjs,cjs}', '**/*.config.{js,cjs,mjs,ts}'],
13296
rules: {
13397
'@typescript-eslint/no-require-imports': 'off',
134-
'import/no-unresolved': 'off',
98+
'import-x/no-named-as-default-member': 'off',
13599
},
136100
},
137101
globalIgnores(['**/coverage/', '**/dist/']),

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
"eslint-config-prettier": "^10.1.8",
7373
"eslint-doc-generator": "^2.2.2",
7474
"eslint-import-resolver-typescript": "^4.4.4",
75-
"eslint-plugin-import": "^2.32.0",
75+
"eslint-plugin-import-x": "^4.16.1",
7676
"eslint-plugin-jest": "^29.0.1",
7777
"eslint-plugin-jest-formatting": "^3.1.0",
7878
"eslint-plugin-node": "^11.1.0",

0 commit comments

Comments
 (0)