Pragmatic ESLint config for robust collaboration
- Exhaustive flat configs for ESLint v9+
- Distinct severities
- Error on potential bugs, ambiguities and unsafe/legacy constructs
- Warn about incompletions, lack of affordance and unification opportunities
- Composable entry points
Install as a dev dependency alongside ESLint and predefined global variables:
pnpm add -D @kripod/eslint-config
pnpm add -D eslint globalsSet up ESLint with presets documented below:
// eslint.config.js
import baseConfig from "@kripod/eslint-config/base";
import typeCheckedConfig from "@kripod/eslint-config/type-checked";
import { defineConfig } from "eslint/config";
import globals from "globals";
export default defineConfig([
{ files: ["**/*.ts", "**/*.mts", "**/*.cts", "**/*.jsx", "**/*.tsx"] },
{ ignores: ["dist/"] },
...baseConfig,
...typeCheckedConfig,
{
languageOptions: {
globals: {
...globals["shared-node-browser"],
},
},
},
]);If using TypeScript, consider adopting @total-typescript/tsconfig or:
- Enable
strictNullChecksor the broaderstrictcompiler option - Set
moduletoPreserveorNodeNext, as package entry points may fail to resolve otherwise
base— JS + TS, no framework-specific rulestype-checked— Typed linting via project service
Package scripts may be added for convenience: