Skip to content

Commit 10bf1ab

Browse files
authored
fix: swap to import-x/ to improve TS resolver (#231)
* fix: swap to `import-x/` to improve TS resolver Makes use of `createTypeScriptImportResolver` with `'import-x/resolver-next'` Fixes #226 * docs: update reference to import module
1 parent 2bcb75f commit 10bf1ab

7 files changed

Lines changed: 47 additions & 189 deletions

File tree

.knip.jsonc

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@
44
"index.js",
55
"index.d.ts"
66
],
7-
"ignoreDependencies": [
8-
"eslint-import-resolver-typescript"
9-
],
107
"ignore": [
118
"test/should-*/**/*",
129
"test/ts-extension-eslint.config.mjs"

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ module.exports = require('neostandard')({
159159
#### List of exported plugins
160160

161161
* `@stylistic` - export of [`@stylistic/eslint-plugin`](https://npmjs.com/package/@stylistic/eslint-plugin)
162-
* `import` - export of [`eslint-plugin-import`](https://npmjs.com/package/eslint-plugin-import)
162+
* `import-x` - export of [`eslint-plugin-import-x`](https://npmjs.com/package/eslint-plugin-import-x)
163163
* `n` - export of [`eslint-plugin-n`](https://npmjs.com/package/eslint-plugin-n)
164164
* `promise` - export of [`eslint-plugin-promise`](https://npmjs.com/package/eslint-plugin-promise)
165165
* `react` - export of [`eslint-plugin-react`](https://npmjs.com/package/eslint-plugin-react)

index.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,8 @@ module.exports.plugins = /** @type {const} */ ({
1010
get '@stylistic' () {
1111
return require('@stylistic/eslint-plugin')
1212
},
13-
get import () {
14-
// @ts-ignore
15-
return require('eslint-plugin-import')
13+
get 'import-x' () {
14+
return require('eslint-plugin-import-x')
1615
},
1716
get n () {
1817
return require('eslint-plugin-n')
@@ -22,7 +21,6 @@ module.exports.plugins = /** @type {const} */ ({
2221
return require('eslint-plugin-promise')
2322
},
2423
get react () {
25-
// @ts-ignore
2624
return require('eslint-plugin-react')
2725
},
2826
get 'typescript-eslint' () {

lib/configs/base.js

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
'use strict'
22

33
const globals = require('globals')
4-
// @ts-ignore
5-
const eslintPluginImport = require('eslint-plugin-import')
4+
const eslintPluginImportX = require('eslint-plugin-import-x')
65
const eslintPluginN = require('eslint-plugin-n')
76
// @ts-ignore
87
const eslintPluginPromise = require('eslint-plugin-promise')
@@ -23,7 +22,7 @@ module.exports = /** @satisfies {import('eslint').Linter.Config} */ ({
2322
},
2423

2524
plugins: {
26-
import: eslintPluginImport,
25+
'import-x': /** @type {import('eslint').ESLint.Plugin} */ (/** @type {unknown} */ (eslintPluginImportX)),
2726
n: eslintPluginN,
2827
promise: eslintPluginPromise,
2928
},
@@ -150,12 +149,12 @@ module.exports = /** @satisfies {import('eslint').Linter.Config} */ ({
150149
'valid-typeof': ['error', { requireStringLiterals: true }],
151150
yoda: ['error', 'never'],
152151

153-
'import/export': 'error',
154-
'import/first': 'error',
155-
'import/no-absolute-path': ['error', { esmodule: true, commonjs: true, amd: false }],
156-
'import/no-duplicates': 'error',
157-
'import/no-named-default': 'error',
158-
'import/no-webpack-loader-syntax': 'error',
152+
'import-x/export': 'error',
153+
'import-x/first': 'error',
154+
'import-x/no-absolute-path': ['error', { esmodule: true, commonjs: true, amd: false }],
155+
'import-x/no-duplicates': 'error',
156+
'import-x/no-named-default': 'error',
157+
'import-x/no-webpack-loader-syntax': 'error',
159158

160159
// TODO: Should only be active for server side scripts
161160
'n/handle-callback-err': ['error', '^(err|error)$'],

lib/ts.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
'use strict'
22

3+
// @ts-ignore
4+
const { createTypeScriptImportResolver } = require('eslint-import-resolver-typescript')
35
const { parser, plugin } = require('typescript-eslint')
46

57
const tsRedundant = require('./configs/ts-redundant')
@@ -89,10 +91,13 @@ function typescriptify (configs, options) {
8991
'@typescript-eslint': plugin,
9092
},
9193
settings: {
92-
'import/resolver': {
93-
typescript: true,
94-
node: true,
95-
},
94+
'import-x/resolver-next': [
95+
createTypeScriptImportResolver(
96+
(Array.isArray(project) || typeof project === 'string')
97+
? { project }
98+
: {}
99+
),
100+
],
96101
},
97102
rules: {
98103
...deactivatedRules,

package-lock.json

Lines changed: 25 additions & 166 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@
8282
"dependencies": {
8383
"@humanwhocodes/gitignore-to-minimatch": "^1.0.2",
8484
"@stylistic/eslint-plugin": "2.11.0",
85-
"eslint-import-resolver-typescript": "^3.6.3",
86-
"eslint-plugin-import": "^2.31.0",
85+
"eslint-import-resolver-typescript": "^3.7.0",
86+
"eslint-plugin-import-x": "^4.5.0",
8787
"eslint-plugin-n": "^17.14.0",
8888
"eslint-plugin-promise": "^7.2.1",
8989
"eslint-plugin-react": "^7.37.2",

0 commit comments

Comments
 (0)