【ESLint】eslint-plugin-import 2.31.0 → 2.32.0

モチベーション
eslint-plugin-import 2.31.0 → 2.32.0 にしたい
eslint-plugin-import
リリースノート
Renovate使っているのでリリースノートを探さなくて良いので便利だなと思った

課題1
@ts-expect-error
でエラーが出ていた。eslint-plugin-import 2.31.0 → 2.32.0 で型が追加された様子だけれどリリースノートには記載がない。@ts-expect-error
が不要になったので @ts-expect-error
を削除するだけでok

課題2
ConfigError: Config "import/typescript": Key "plugins": Cannot redefine plugin "import".
次に上記のエラーが出た。プラグインを重複登録しているために発生している。似たようなIssueは結構散見するのでみんな困っていそうだなーと。
純粋に重複しないようpluginを除外するようにした
import pluginImport from 'eslint-plugin-import';
const { plugins, name, ...pluginImportTypeScript } = pluginImport.flatConfigs.typescript;
const typescriptConfig = [
{
name: 'eslint-plugin-import/typescript',
plugins: { import: pluginImport },
...pluginImportTypeScript,
}
]

課題3
typescriptConfigの中にtypescript-eslintのconfig objectがあるが型エラーが発生した
import pluginImport from 'eslint-plugin-import';
const { plugins, name, ...pluginImportTypeScript } = pluginImport.flatConfigs.typescript;
const typescriptConfig = [
// ここら辺にtypesscript-eslintのconfig objectがある
{
name: 'eslint-plugin-import/typescript',
plugins: { import: pluginImport },
...pluginImportTypeScript,
}
]
どうやらtypescript-eslint側の問題らしく型キャストで対応した。今まで型エラーが発生していなかった理由はeslint-plugin-importがany型になっていて型の健全性 (Type Soundness)が欠如していたから。普段any型を使うことがなくこういったケースもあるんだなーと。
I'd suggest using type casting, or ts-ignore in this case. It's the issue of upstream eslint/typescript-eslint, there is not much we could do here.

モチベーション
課題2を対応する時にconfig nameは特に指定していなかったけれどimport/typescriptになっていてpluginImport.flatConfigs.typescript
では特にconfig nameの指定はなかったのになぜーと思ったので追ってみる
pluginImport.flatConfigs.typescript
L102がpluginImport.flatConfigs.typescript
に該当する
createFlatConfigでconfig nameを追加していた。pluginもここで追加されている。
pluginImport.flatConfigs.typescript
の独自の設定が以下になる。createFlatConfigで共通部分を注入している。eslint-plugin-importに限らず、共通部分は切り出されている可能性かもとライブラリ見る時は予測する必要があるのかなと思った。

まとめ
eslint-plugin-import 2.31.0 → 2.32.0 にするために以下の3つの修正に取り組んだ
- @ts-expect-errorが不要になったためエラー
- プラグインを重複登録していたためエラー
- typescript-eslintの型エラー
補足
そこまで重い修正ではないものの、自分だけではなく他の方も遭遇しそうなエラーだったので足跡を残しておく。このスクラップで調査の時間短縮ができたら幸いです