Skip to content

Commit 70d09b7

Browse files
committedMar 21, 2025
fix(eslint): compatible with dts generation for esm-only plugins
1 parent 280c52d commit 70d09b7

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed
 

‎packages/eslint/lib/dtsGenerate.ts

+13-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,16 @@ import * as path from 'path';
33

44
const variableNameRegex = /^[a-zA-Z_$][0-9a-zA-Z_$]*$/;
55

6-
export function generate(nodeModulesDirs: string[]) {
6+
export async function generate(
7+
nodeModulesDirs: string[],
8+
loader = async (mod: string) => {
9+
try {
10+
return require(mod);
11+
} catch {
12+
return await import(mod);
13+
}
14+
}
15+
) {
716
let indentLevel = 0;
817
let dts = '';
918
let defId = 0;
@@ -26,7 +35,7 @@ export function generate(nodeModulesDirs: string[]) {
2635
for (const subPkg of subPkgs) {
2736
if (subPkg === 'eslint-plugin') {
2837
const pluginName = `${pkg}/${subPkg}`;
29-
let plugin = require(pluginName);
38+
let plugin = await loader(pluginName);
3039
if ('default' in plugin) {
3140
plugin = plugin.default;
3241
}
@@ -43,7 +52,7 @@ export function generate(nodeModulesDirs: string[]) {
4352
}
4453
}
4554
else if (pkg.startsWith('eslint-plugin-')) {
46-
let plugin = require(pkg);
55+
let plugin = await loader(pkg);
4756
if ('default' in plugin) {
4857
plugin = plugin.default;
4958
}
@@ -61,7 +70,7 @@ export function generate(nodeModulesDirs: string[]) {
6170
for (const ruleFile of ruleFiles) {
6271
if (ruleFile.endsWith('.js')) {
6372
const ruleName = ruleFile.replace('.js', '');
64-
const rule = require(path.join(rulesDir, ruleFile));
73+
const rule = await loader(path.join(rulesDir, ruleFile));
6574
addRule(undefined, ruleName, rule);
6675
}
6776
}

‎packages/eslint/scripts/generateDts.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ while (true) {
1818

1919
try {
2020
const { generate } = require('../lib/dtsGenerate.js');
21-
const dts = generate(nodeModulesDirs);
22-
23-
fs.writeFileSync(path.resolve(__dirname, '..', 'lib', 'types.d.ts'), dts);
21+
generate(nodeModulesDirs).then(dts => {
22+
fs.writeFileSync(path.resolve(__dirname, '..', 'lib', 'types.d.ts'), dts);
23+
});
2424
} catch { }

0 commit comments

Comments
 (0)
Failed to load comments.