@oxlint/migrate
Version:
Generates a `.oxlintrc.json` from a existing eslint flat config
92 lines (91 loc) • 3.03 kB
JavaScript
import { removeGlobalsWithAreCoveredByEnv, transformBoolGlobalToString, ES_VERSIONS, cleanUpUselessOverridesEnv } from "./env_globals.mjs";
import { replaceTypescriptAliasRules, replaceNodePluginName, cleanUpRulesWhichAreCoveredByCategory, cleanUpUselessOverridesRules, cleanUpUselessOverridesPlugins } from "./plugins_rules.mjs";
import { isEqualDeep } from "./utilities.mjs";
const TS_ESLINT_DEFAULT_OVERRIDE = {
files: ["**/*.ts", "**/*.tsx", "**/*.mts", "**/*.cts"],
rules: {
"no-class-assign": "off",
"no-const-assign": "off",
"no-dupe-class-members": "off",
"no-dupe-keys": "off",
"no-func-assign": "off",
"no-import-assign": "off",
"no-new-native-nonconstructor": "off",
"no-obj-calls": "off",
"no-redeclare": "off",
"no-setter-return": "off",
"no-this-before-super": "off",
"no-unsafe-negation": "off",
"no-var": "error",
"prefer-rest-params": "error",
"prefer-spread": "error"
}
};
const cleanUpDefaultTypeScriptOverridesForEslint = (config) => {
if (config.overrides === void 0) {
return;
}
const indexesToDelete = [];
for (const index in config.overrides) {
const override = config.overrides[index];
if (isEqualDeep(override, TS_ESLINT_DEFAULT_OVERRIDE)) {
indexesToDelete.push(index);
}
}
indexesToDelete.forEach((index) => delete config.overrides[index]);
config.overrides = config.overrides.filter(
(overrides) => Object.keys(overrides).length > 0
);
if (Object.keys(config.overrides).length === 0) {
delete config.overrides;
}
};
const cleanUpUselessOverridesEntries = (config) => {
cleanUpDefaultTypeScriptOverridesForEslint(config);
cleanUpUselessOverridesRules(config);
cleanUpUselessOverridesPlugins(config);
cleanUpUselessOverridesEnv(config);
if (config.overrides === void 0) {
return;
}
for (const overrideIndex in config.overrides) {
if (Object.keys(config.overrides[overrideIndex]).length === 1) {
delete config.overrides[overrideIndex];
}
}
config.overrides = config.overrides.filter(
(overrides) => Object.keys(overrides).length > 0
);
if (config.overrides.length === 0) {
delete config.overrides;
}
};
const cleanUpOxlintConfig = (config) => {
removeGlobalsWithAreCoveredByEnv(config);
transformBoolGlobalToString(config);
replaceTypescriptAliasRules(config);
replaceNodePluginName(config);
cleanUpRulesWhichAreCoveredByCategory(config);
if (config.globals !== void 0 && Object.keys(config.globals).length === 0) {
delete config.globals;
}
if (config.env !== void 0) {
delete config.env.es3;
delete config.env.es5;
delete config.env.es2015;
let detected = false;
for (const esVersion of [...ES_VERSIONS].reverse()) {
if (detected) {
delete config.env[`es${esVersion}`];
} else if (config.env[`es${esVersion}`] === true) {
detected = true;
}
}
}
if (!("files" in config)) {
cleanUpUselessOverridesEntries(config);
}
};
export {
cleanUpOxlintConfig
};