@jimmy.codes/eslint-config
Version:
A simple, modern ESLint config that covers most use cases.
87 lines (86 loc) • 2.94 kB
JavaScript
import { GLOB_JS, GLOB_JSX, GLOB_TESTS } from "./globs.mjs";
import { n as extractOptions, t as unwrapDefault } from "./interop-default-CAdBatTA.mjs";
//#region src/rules/typescript.ts
const disabledEslintRules = {
"no-unused-private-class-members": "off",
"no-use-before-define": "off"
};
const typescriptRules = (options) => {
return {
...disabledEslintRules,
"@typescript-eslint/consistent-type-exports": ["error", { fixMixedExportsWithInlineTypeSpecifier: false }],
"@typescript-eslint/consistent-type-imports": ["error", { fixStyle: "separate-type-imports" }],
"@typescript-eslint/no-deprecated": "warn",
"@typescript-eslint/no-misused-promises": ["error", { checksVoidReturn: { attributes: false } }],
"@typescript-eslint/no-unnecessary-type-conversion": "error",
"@typescript-eslint/no-unused-private-class-members": "error",
"@typescript-eslint/no-unused-vars": ["error", {
args: "all",
argsIgnorePattern: "^_",
caughtErrors: "all",
caughtErrorsIgnorePattern: "^_",
destructuredArrayIgnorePattern: "^_",
ignoreRestSiblings: true,
varsIgnorePattern: "^_"
}],
"@typescript-eslint/no-use-before-define": ["error", {
allowNamedExports: false,
classes: false,
functions: false,
variables: true
}],
"@typescript-eslint/no-useless-empty-export": "error",
"@typescript-eslint/restrict-template-expressions": ["error", { allowNumber: true }],
"@typescript-eslint/switch-exhaustiveness-check": "error",
...options?.overrides
};
};
//#endregion
//#region src/configs/typescript.ts
async function typescriptConfig(options) {
const { configs } = await import("typescript-eslint");
const extractedOptions = extractOptions(options);
return [
...configs.strictTypeChecked,
...configs.stylisticTypeChecked.filter((config) => {
return config.name === "typescript-eslint/stylistic-type-checked";
}),
{
languageOptions: { parserOptions: {
projectService: true,
tsconfigRootDir: process.cwd()
} },
name: "jimmy.codes/typescript",
rules: typescriptRules(extractedOptions)
},
{
files: [GLOB_JS, GLOB_JSX],
...configs.disableTypeChecked,
languageOptions: { parserOptions: {
program: null,
project: false,
projectService: false
} }
},
{
files: GLOB_TESTS,
name: "jimmy.codes/typescript/testing",
rules: {
"@typescript-eslint/no-unsafe-argument": "off",
"@typescript-eslint/no-unsafe-assignment": "off"
}
},
...extractedOptions?.erasableSyntaxOnly ? [{
name: "jimmy.codes/typescript/erasable-syntax-only",
plugins: { "erasable-syntax-only": await unwrapDefault(import("eslint-plugin-erasable-syntax-only")) },
rules: {
"erasable-syntax-only/enums": "error",
"erasable-syntax-only/import-aliases": "error",
"erasable-syntax-only/namespaces": "error",
"erasable-syntax-only/parameter-properties": "error"
}
}] : []
];
}
//#endregion
export { typescriptConfig as default };