From 73d1099825f45866c2a2b6dab1cba58fc409f04c Mon Sep 17 00:00:00 2001 From: Pelle Wessman Date: Fri, 14 Jun 2024 16:44:13 +0200 Subject: [PATCH 1/2] fix: `mixed-esm-and-cjs` adds only deviating type --- lib/configs/recommended.js | 2 ++ lib/index.js | 7 ++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/configs/recommended.js b/lib/configs/recommended.js index 073c9102..af2c3ddc 100644 --- a/lib/configs/recommended.js +++ b/lib/configs/recommended.js @@ -26,3 +26,5 @@ module.exports.eslintrc = { } module.exports.flat = recommendedConfig.flat + +module.exports.isModule = isModule diff --git a/lib/index.js b/lib/index.js index 49fd4c71..9687a5af 100644 --- a/lib/index.js +++ b/lib/index.js @@ -75,9 +75,10 @@ const plugin = { "flat/recommended-script": { ...cjsConfig.flat }, "flat/recommended": { ...recommendedConfig.flat }, "flat/mixed-esm-and-cjs": [ - { files: ["**/*.js"], ...recommendedConfig.flat }, - { files: ["**/*.mjs"], ...esmConfig.flat }, - { files: ["**/*.cjs"], ...cjsConfig.flat }, + { ...recommendedConfig.flat }, + recommendedConfig.isModule + ? { files: ["**/*.cjs"], ...cjsConfig.flat } + : { files: ["**/*.mjs"], ...esmConfig.flat }, ], }, } From 145dbec5ac3477b3fa0236d6c327e4d813d6a894 Mon Sep 17 00:00:00 2001 From: Pelle Wessman Date: Tue, 6 Aug 2024 14:17:05 +0200 Subject: [PATCH 2/2] feat: add and export new `recommended-env` --- lib/configs/recommended-env.js | 46 ++++++++++++++++++++++++++++++++ lib/configs/recommended-mixed.js | 16 +++++++++++ lib/configs/recommended.js | 11 +------- lib/index.js | 20 +++++++------- 4 files changed, 73 insertions(+), 20 deletions(-) create mode 100644 lib/configs/recommended-env.js create mode 100644 lib/configs/recommended-mixed.js diff --git a/lib/configs/recommended-env.js b/lib/configs/recommended-env.js new file mode 100644 index 00000000..82577013 --- /dev/null +++ b/lib/configs/recommended-env.js @@ -0,0 +1,46 @@ +"use strict" + +const globals = require("globals") +const { getPackageJson } = require("../util/get-package-json") + +const packageJson = getPackageJson() + +const isModule = + packageJson != null && + typeof packageJson === "object" && + "type" in packageJson && + packageJson.type === "module" + +const moduleEnv = { + name: "node/env/module", + languageOptions: { + globals: { + ...globals.nodeBuiltin, + }, + }, +} + +const scriptEnv = { + name: "node/env/script", + languageOptions: { + globals: { + ...globals.node, + }, + }, +} + +const recommendedEnv = [ + { + ...(isModule ? { ignores: ["**/*.cjs"] } : { files: ["**/*.mjs"] }), + ...moduleEnv, + }, + { + ...(isModule ? { files: ["**/*.cjs"] } : { ignores: ["**/*.mjs"] }), + ...scriptEnv, + }, +] + +module.exports = { + isModule, + recommendedEnv, +} diff --git a/lib/configs/recommended-mixed.js b/lib/configs/recommended-mixed.js new file mode 100644 index 00000000..75e12aa9 --- /dev/null +++ b/lib/configs/recommended-mixed.js @@ -0,0 +1,16 @@ +"use strict" + +const { commonRules } = require("./_commons") +const { recommendedEnv } = require("./recommended-env") + +/** + * https://eslint.org/docs/latest/use/configure/configuration-files-new + * @type {import('eslint').Linter.FlatConfig[]} + */ +module.exports = [ + ...recommendedEnv, + { + name: "node/recommended", + rules: commonRules, + }, +] diff --git a/lib/configs/recommended.js b/lib/configs/recommended.js index af2c3ddc..e3e52c09 100644 --- a/lib/configs/recommended.js +++ b/lib/configs/recommended.js @@ -1,16 +1,9 @@ "use strict" -const { getPackageJson } = require("../util/get-package-json") +const { isModule } = require("./recommended-env") const moduleConfig = require("./recommended-module") const scriptConfig = require("./recommended-script") -const packageJson = getPackageJson() - -const isModule = - packageJson != null && - typeof packageJson === "object" && - "type" in packageJson && - packageJson.type === "module" const recommendedConfig = isModule ? moduleConfig : scriptConfig /** @@ -26,5 +19,3 @@ module.exports.eslintrc = { } module.exports.flat = recommendedConfig.flat - -module.exports.isModule = isModule diff --git a/lib/index.js b/lib/index.js index 9687a5af..5f938097 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,15 +1,21 @@ "use strict" const pkg = require("../package.json") +const { recommendedEnv } = require("./configs/recommended-env") +const mixedConfig = require("./configs/recommended-mixed") const esmConfig = require("./configs/recommended-module") const cjsConfig = require("./configs/recommended-script") const recommendedConfig = require("./configs/recommended") +const recommendedMixed = structuredClone(mixedConfig) + /** * @typedef {{ 'recommended-module': import('eslint').ESLint.ConfigData; 'recommended-script': import('eslint').ESLint.ConfigData; 'recommended': import('eslint').ESLint.ConfigData; + 'flat/recommended-env': import('eslint').Linter.FlatConfig[]; + 'flat/recommended-mixed': import('eslint').Linter.FlatConfig[]; 'flat/recommended-module': import('eslint').Linter.FlatConfig; 'flat/recommended-script': import('eslint').Linter.FlatConfig; 'flat/recommended': import('eslint').Linter.FlatConfig; @@ -71,24 +77,18 @@ const plugin = { "recommended-module": { plugins: ["n"], ...esmConfig.eslintrc }, "recommended-script": { plugins: ["n"], ...cjsConfig.eslintrc }, recommended: { plugins: ["n"], ...recommendedConfig.eslintrc }, + "flat/recommended-env": structuredClone(recommendedEnv), + "flat/recommended-mixed": recommendedMixed, "flat/recommended-module": { ...esmConfig.flat }, "flat/recommended-script": { ...cjsConfig.flat }, "flat/recommended": { ...recommendedConfig.flat }, - "flat/mixed-esm-and-cjs": [ - { ...recommendedConfig.flat }, - recommendedConfig.isModule - ? { files: ["**/*.cjs"], ...cjsConfig.flat } - : { files: ["**/*.mjs"], ...esmConfig.flat }, - ], + "flat/mixed-esm-and-cjs": recommendedMixed, }, } plugin.configs["flat/recommended-module"].plugins = { n: plugin } plugin.configs["flat/recommended-script"].plugins = { n: plugin } plugin.configs["flat/recommended"].plugins = { n: plugin } - -for (const config of plugin.configs["flat/mixed-esm-and-cjs"]) { - config.plugins = { n: plugin } -} +recommendedMixed[recommendedMixed.length - 1].plugins = { n: plugin } module.exports = plugin