A comprehensive ESLint configuration package for Payload CMS and related projects, providing opinionated linting rules for TypeScript, React, Jest, and other common development patterns.
npx @tessl/cli install tessl/npm-payloadcms--eslint-config@3.28.0@payloadcms/eslint-config provides a comprehensive ESLint configuration package for Payload CMS and related projects, offering opinionated linting rules for TypeScript, React, Jest, and other common development patterns. The package includes configurations for different file types (TypeScript, TSX, test files, and Payload config files) with specific rule sets for code quality, import organization, accessibility, and consistency.
npm install @payloadcms/eslint-configimport eslintConfig from "@payloadcms/eslint-config";For named imports:
import { rootEslintConfig } from "@payloadcms/eslint-config";// eslint.config.js (ESLint 9.x flat config)
import payloadEslintConfig from "@payloadcms/eslint-config";
export default payloadEslintConfig;@payloadcms/eslint-config is built around several key components:
The primary export providing a complete ESLint configuration array for Payload CMS projects.
/**
* Main ESLint configuration array containing 5 distinct configurations
* for different file types and contexts
*/
declare const rootEslintConfig: Config[];
/**
* Default export (same as rootEslintConfig)
*/
declare const _default: Config[];
export default _default;
export { rootEslintConfig };The configuration array includes:
**/*.ts files**/*.tsx files**/*.spec.ts files*.config.ts and config.ts filesUtility function for recursively merging configuration objects with array handling.
/**
* Recursively merges multiple objects, handling arrays and nested objects
* @param objs - Objects to merge (later objects take priority)
* @returns Merged object
*/
declare function deepMerge(...objs: any[]): any;Import:
import { deepMerge } from "@payloadcms/eslint-config/deepMerge.js";Usage Example:
import { deepMerge } from "@payloadcms/eslint-config/deepMerge.js";
const config1 = { rules: { "no-console": "warn" } };
const config2 = { rules: { "no-unused-vars": "error" } };
const merged = deepMerge(config1, config2);
// Result: { rules: { "no-console": "warn", "no-unused-vars": "error" } }/**
* ESLint flat configuration object
*/
interface Config {
name?: string;
files?: string[];
ignores?: string[];
languageOptions?: {
ecmaVersion?: string | number;
sourceType?: "script" | "module";
globals?: Record<string, boolean>;
parser?: any;
parserOptions?: Record<string, any>;
};
plugins?: Record<string, any>;
rules?: Record<string, string | number | Array<string | number | object>>;
settings?: Record<string, any>;
}.ts): Core TypeScript linting with type-checking.tsx): React + TypeScript with accessibility rules.spec.ts): Jest-specific rules for testing*.config.ts): Relaxed rules for configuration files