Skip to content

Commit dfef597

Browse files
authored
fix: correct defineConfig usage in generated config (#161)
* fix: correct `defineConfig` usage in generated config * fix: improve version handling * chore: remove console.log * chore: fix lint * fix: update logic * fix: update logic * fix: correctly add defineConfig import * fix: import defineConfig via @eslint/config-helpers * fix: correct export * fix: use semver package
1 parent d08a7a4 commit dfef597

File tree

57 files changed

+131
-109
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+131
-109
lines changed

lib/config-generator.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import path from "node:path";
1212
import { spawnSync } from "node:child_process";
1313
import { writeFile } from "node:fs/promises";
1414
import enquirer from "enquirer";
15+
import semverSatisfies from "semver/functions/satisfies";
1516
import { isPackageTypeModule, installSyncSaveDev, fetchPeerDependencies, findPackageJson } from "./utils/npm-utils.js";
1617
import { getShorthandName } from "./utils/naming.js";
1718
import * as log from "./utils/logging.js";
@@ -119,7 +120,8 @@ export class ConfigGenerator {
119120
const languages = this.answers.languages ?? ["javascript"];
120121
const purpose = this.answers.purpose;
121122

122-
let importContent = "import { defineConfig } from \"eslint/config\";\n";
123+
let isDefineConfigExported = false;
124+
let importContent = "";
123125
let exportContent = "";
124126
let needCompatHelper = false;
125127

@@ -245,6 +247,11 @@ export class ConfigGenerator {
245247

246248
this.result.devDependencies.push(...peers);
247249
} else {
250+
const versionMatch = peers[eslintIndex].match(/eslint@(.+)/u);
251+
const versionRequirement = versionMatch[1]; // Complete version requirement string
252+
253+
// Check if the version requirement allows for ESLint 9.22.0+
254+
isDefineConfigExported = semverSatisfies("9.22.0", versionRequirement);
248255

249256
// eslint is in the peer dependencies => overwrite eslint version
250257
this.result.devDependencies[0] = peers[eslintIndex];
@@ -263,6 +270,15 @@ export class ConfigGenerator {
263270

264271
exportContent += ` compat.extends("${shorthandName}"),\n`;
265272
}
273+
} else {
274+
isDefineConfigExported = true;
275+
}
276+
277+
if (isDefineConfigExported) {
278+
importContent += "import { defineConfig } from \"eslint/config\";\n";
279+
} else {
280+
this.result.devDependencies.push("@eslint/config-helpers");
281+
importContent += "import { defineConfig } from \"@eslint/config-helpers\";\n";
266282
}
267283

268284
if (needCompatHelper) {

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@
4141
},
4242
"dependencies": {
4343
"cross-spawn": "^7.0.2",
44-
"enquirer": "^2.3.5"
44+
"enquirer": "^2.3.5",
45+
"semver": "^7.7.1"
4546
},
4647
"devDependencies": {
4748
"@vitest/coverage-v8": "^1.3.1",

tests/__snapshots__/config@eslint-config-airbnb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
2+
"configContent": "import { defineConfig } from "@eslint/config-helpers";
33

44
import path from "node:path";
55
import { fileURLToPath } from "node:url";
@@ -22,6 +22,7 @@ export default defineConfig([
2222
"eslint-plugin-import@^2.25.3",
2323
"eslint-plugin-jsx-a11y@^6.5.1",
2424
"eslint-plugin-react-hooks@^4.3.0",
25+
"@eslint/config-helpers",
2526
"@eslint/eslintrc",
2627
"@eslint/js",
2728
],

tests/__snapshots__/config@eslint-config-airbnb-base

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
2+
"configContent": "import { defineConfig } from "@eslint/config-helpers";
33

44
import path from "node:path";
55
import { fileURLToPath } from "node:url";
@@ -19,6 +19,7 @@ export default defineConfig([
1919
"eslint@^7.32.0 || ^8.2.0",
2020
"eslint-config-airbnb-base",
2121
"eslint-plugin-import@^2.25.2",
22+
"@eslint/config-helpers",
2223
"@eslint/eslintrc",
2324
"@eslint/js",
2425
],

tests/__snapshots__/config@eslint-config-standard

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
2+
"configContent": "import { defineConfig } from "@eslint/config-helpers";
33

44
import path from "node:path";
55
import { fileURLToPath } from "node:url";
@@ -21,6 +21,7 @@ export default defineConfig([
2121
"eslint-plugin-import@^2.25.2",
2222
"eslint-plugin-n@^15.0.0 || ^16.0.0 ",
2323
"eslint-plugin-promise@^6.0.0",
24+
"@eslint/config-helpers",
2425
"@eslint/eslintrc",
2526
"@eslint/js",
2627
],

tests/__snapshots__/config@eslint-config-standard-flat

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import config from "eslint-config-standard";
2+
"configContent": "import config from "eslint-config-standard";
3+
import { defineConfig } from "@eslint/config-helpers";
44

55

66
export default defineConfig([
@@ -13,6 +13,7 @@ export default defineConfig([
1313
"eslint-plugin-import@^2.25.2",
1414
"eslint-plugin-n@^15.0.0 || ^16.0.0 ",
1515
"eslint-plugin-promise@^6.0.0",
16+
"@eslint/config-helpers",
1617
],
1718
"installFlags": [
1819
"-D",

tests/__snapshots__/config@eslint-config-standard-flat2

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import config from "eslint-config-standard";
2+
"configContent": "import config from "eslint-config-standard";
3+
import { defineConfig } from "@eslint/config-helpers";
44

55

66
export default defineConfig([
@@ -13,6 +13,7 @@ export default defineConfig([
1313
"eslint-plugin-import@^2.25.2",
1414
"eslint-plugin-n@^15.0.0 || ^16.0.0 ",
1515
"eslint-plugin-promise@^6.0.0",
16+
"@eslint/config-helpers",
1617
],
1718
"installFlags": [
1819
"-D",

tests/__snapshots__/config@eslint-config-xo

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import config from "eslint-config-xo";
2+
"configContent": "import config from "eslint-config-xo";
3+
import { defineConfig } from "eslint/config";
44

55

66
export default defineConfig([

tests/__snapshots__/esm-css-problems

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import css from "@eslint/css";
2+
"configContent": "import css from "@eslint/css";
3+
import { defineConfig } from "eslint/config";
44

55

66
export default defineConfig([

tests/__snapshots__/esm-css-syntax

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import css from "@eslint/css";
2+
"configContent": "import css from "@eslint/css";
3+
import { defineConfig } from "eslint/config";
44

55

66
export default defineConfig([

tests/__snapshots__/esm-javascript-json-problems

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import js from "@eslint/js";
2+
"configContent": "import js from "@eslint/js";
43
import globals from "globals";
54
import json from "@eslint/json";
5+
import { defineConfig } from "eslint/config";
66

77

88
export default defineConfig([

tests/__snapshots__/esm-json-problems

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import json from "@eslint/json";
2+
"configContent": "import json from "@eslint/json";
3+
import { defineConfig } from "eslint/config";
44

55

66
export default defineConfig([

tests/__snapshots__/esm-json-syntax

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import json from "@eslint/json";
2+
"configContent": "import json from "@eslint/json";
3+
import { defineConfig } from "eslint/config";
44

55

66
export default defineConfig([

tests/__snapshots__/esm-json5-problems

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import json from "@eslint/json";
2+
"configContent": "import json from "@eslint/json";
3+
import { defineConfig } from "eslint/config";
44

55

66
export default defineConfig([

tests/__snapshots__/esm-json5-syntax

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import json from "@eslint/json";
2+
"configContent": "import json from "@eslint/json";
3+
import { defineConfig } from "eslint/config";
44

55

66
export default defineConfig([

tests/__snapshots__/esm-jsonc-problems

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import json from "@eslint/json";
2+
"configContent": "import json from "@eslint/json";
3+
import { defineConfig } from "eslint/config";
44

55

66
export default defineConfig([

tests/__snapshots__/esm-jsonc-syntax

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import json from "@eslint/json";
2+
"configContent": "import json from "@eslint/json";
3+
import { defineConfig } from "eslint/config";
44

55

66
export default defineConfig([

tests/__snapshots__/esm-markdown-commonmark-problems

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import markdown from "@eslint/markdown";
2+
"configContent": "import markdown from "@eslint/markdown";
3+
import { defineConfig } from "eslint/config";
44

55

66
export default defineConfig([

tests/__snapshots__/esm-markdown-commonmark-syntax

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import markdown from "@eslint/markdown";
2+
"configContent": "import markdown from "@eslint/markdown";
3+
import { defineConfig } from "eslint/config";
44

55

66
export default defineConfig([

tests/__snapshots__/esm-markdown-gfm-problems

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import markdown from "@eslint/markdown";
2+
"configContent": "import markdown from "@eslint/markdown";
3+
import { defineConfig } from "eslint/config";
44

55

66
export default defineConfig([

tests/__snapshots__/esm-markdown-gfm-syntax

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import markdown from "@eslint/markdown";
2+
"configContent": "import markdown from "@eslint/markdown";
3+
import { defineConfig } from "eslint/config";
44

55

66
export default defineConfig([

tests/__snapshots__/problems-commonjs-none-javascript

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import js from "@eslint/js";
2+
"configContent": "import js from "@eslint/js";
43
import globals from "globals";
4+
import { defineConfig } from "eslint/config";
55

66

77
export default defineConfig([

tests/__snapshots__/problems-commonjs-none-typescript

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import js from "@eslint/js";
2+
"configContent": "import js from "@eslint/js";
43
import globals from "globals";
54
import tseslint from "typescript-eslint";
5+
import { defineConfig } from "eslint/config";
66

77

88
export default defineConfig([

tests/__snapshots__/problems-commonjs-react-javascript

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import js from "@eslint/js";
2+
"configContent": "import js from "@eslint/js";
43
import globals from "globals";
54
import pluginReact from "eslint-plugin-react";
5+
import { defineConfig } from "eslint/config";
66

77

88
export default defineConfig([

tests/__snapshots__/problems-commonjs-react-typescript

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import js from "@eslint/js";
2+
"configContent": "import js from "@eslint/js";
43
import globals from "globals";
54
import tseslint from "typescript-eslint";
65
import pluginReact from "eslint-plugin-react";
6+
import { defineConfig } from "eslint/config";
77

88

99
export default defineConfig([

tests/__snapshots__/problems-commonjs-vue-javascript

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import js from "@eslint/js";
2+
"configContent": "import js from "@eslint/js";
43
import globals from "globals";
54
import pluginVue from "eslint-plugin-vue";
5+
import { defineConfig } from "eslint/config";
66

77

88
export default defineConfig([

tests/__snapshots__/problems-commonjs-vue-typescript

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import js from "@eslint/js";
2+
"configContent": "import js from "@eslint/js";
43
import globals from "globals";
54
import tseslint from "typescript-eslint";
65
import pluginVue from "eslint-plugin-vue";
6+
import { defineConfig } from "eslint/config";
77

88

99
export default defineConfig([

tests/__snapshots__/problems-esm-none-javascript

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import js from "@eslint/js";
2+
"configContent": "import js from "@eslint/js";
43
import globals from "globals";
4+
import { defineConfig } from "eslint/config";
55

66

77
export default defineConfig([

tests/__snapshots__/problems-esm-none-typescript

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import js from "@eslint/js";
2+
"configContent": "import js from "@eslint/js";
43
import globals from "globals";
54
import tseslint from "typescript-eslint";
5+
import { defineConfig } from "eslint/config";
66

77

88
export default defineConfig([

tests/__snapshots__/problems-esm-react-javascript

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import js from "@eslint/js";
2+
"configContent": "import js from "@eslint/js";
43
import globals from "globals";
54
import pluginReact from "eslint-plugin-react";
5+
import { defineConfig } from "eslint/config";
66

77

88
export default defineConfig([

tests/__snapshots__/problems-esm-react-typescript

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import js from "@eslint/js";
2+
"configContent": "import js from "@eslint/js";
43
import globals from "globals";
54
import tseslint from "typescript-eslint";
65
import pluginReact from "eslint-plugin-react";
6+
import { defineConfig } from "eslint/config";
77

88

99
export default defineConfig([

tests/__snapshots__/problems-esm-vue-javascript

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import js from "@eslint/js";
2+
"configContent": "import js from "@eslint/js";
43
import globals from "globals";
54
import pluginVue from "eslint-plugin-vue";
5+
import { defineConfig } from "eslint/config";
66

77

88
export default defineConfig([

tests/__snapshots__/problems-esm-vue-typescript

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{
2-
"configContent": "import { defineConfig } from "eslint/config";
3-
import js from "@eslint/js";
2+
"configContent": "import js from "@eslint/js";
43
import globals from "globals";
54
import tseslint from "typescript-eslint";
65
import pluginVue from "eslint-plugin-vue";
6+
import { defineConfig } from "eslint/config";
77

88

99
export default defineConfig([

0 commit comments

Comments
 (0)