eslint-config-ts-strict
Version:
Very strict ESLint config for projects using TypeScript, React and Prettier. ESLint v9 flat config only. Formatting rules disabled to prevent Prettier conflicts.
105 lines (94 loc) • 2.74 kB
JavaScript
import objectAssign from "object.assign";
import objectEntries from "object.entries";
import { ESLint } from "eslint";
import { fileURLToPath } from 'url';
import path from 'path';
import baseConfig from "./index.js";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const severities = ["off", "warn", "error"];
function getSeverity(ruleConfig) {
if (Array.isArray(ruleConfig)) {
return getSeverity(ruleConfig[0]);
}
if (typeof ruleConfig === "number") {
return severities[ruleConfig];
}
return ruleConfig;
}
async function onlyErrorOnRules(rulesToError, config) {
const errorsOnly = objectAssign({}, config);
const cli = new ESLint({
useEslintrc: false,
baseConfig: config,
});
const baseRules = (await cli.calculateConfigForFile(path.join(__dirname, "index.js")))
.rules;
objectEntries(baseRules).forEach((rule) => {
const ruleName = rule[0];
const ruleConfig = rule[1];
const severity = getSeverity(ruleConfig);
if (rulesToError.indexOf(ruleName) === -1 && severity === "error") {
if (Array.isArray(ruleConfig)) {
errorsOnly.rules[ruleName] = ["warn"].concat(ruleConfig.slice(1));
} else if (typeof ruleConfig === "number") {
errorsOnly.rules[ruleName] = 1;
} else {
errorsOnly.rules[ruleName] = "warn";
}
}
});
return errorsOnly;
}
onlyErrorOnRules(
[
"array-bracket-newline",
"array-bracket-spacing",
"array-element-newline",
"arrow-spacing",
"block-spacing",
"comma-spacing",
"computed-property-spacing",
"dot-location",
"eol-last",
"func-call-spacing",
"function-paren-newline",
"generator-star-spacing",
"implicit-arrow-linebreak",
"indent",
"key-spacing",
"keyword-spacing",
"line-comment-position",
"linebreak-style",
"multiline-ternary",
"newline-per-chained-call",
"no-irregular-whitespace",
"no-mixed-spaces-and-tabs",
"no-multi-spaces",
"no-regex-spaces",
"no-spaced-func",
"no-trailing-spaces",
"no-whitespace-before-property",
"nonblock-statement-body-position",
"object-curly-newline",
"object-curly-spacing",
"object-property-newline",
"one-var-declaration-per-line",
"operator-linebreak",
"padded-blocks",
"padding-line-between-statements",
"rest-spread-spacing",
"semi-spacing",
"semi-style",
"space-before-blocks",
"space-before-function-paren",
"space-in-parens",
"space-infix-ops",
"space-unary-ops",
"spaced-comment",
"switch-colon-spacing",
"template-tag-spacing",
"import/newline-after-import",
],
baseConfig
).then((config) => console.log(JSON.stringify(config)));