or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

index.md

index.mddocs/

0

# @payloadcms/eslint-config

1

2

@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.

3

4

## Package Information

5

6

- **Package Name**: @payloadcms/eslint-config

7

- **Package Type**: npm

8

- **Language**: JavaScript (ES Modules)

9

- **Installation**: `npm install @payloadcms/eslint-config`

10

11

## Core Imports

12

13

```javascript

14

import eslintConfig from "@payloadcms/eslint-config";

15

```

16

17

For named imports:

18

19

```javascript

20

import { rootEslintConfig } from "@payloadcms/eslint-config";

21

```

22

23

## Basic Usage

24

25

```javascript

26

// eslint.config.js (ESLint 9.x flat config)

27

import payloadEslintConfig from "@payloadcms/eslint-config";

28

29

export default payloadEslintConfig;

30

```

31

32

## Architecture

33

34

@payloadcms/eslint-config is built around several key components:

35

36

- **Flat Configuration Format**: Uses ESLint 9.x flat config system with configuration objects

37

- **Multi-file Support**: Provides different rule sets for .ts, .tsx, .spec.ts, and config files

38

- **Plugin Integration**: Combines multiple ESLint plugins (TypeScript, React, Jest, accessibility, etc.)

39

- **Rule Inheritance**: Uses deep merging to combine base configurations with specific overrides

40

- **Type-aware Linting**: Integrates TypeScript parser for advanced type checking rules

41

42

## Capabilities

43

44

### Main Configuration Export

45

46

The primary export providing a complete ESLint configuration array for Payload CMS projects.

47

48

```javascript { .api }

49

/**

50

* Main ESLint configuration array containing 5 distinct configurations

51

* for different file types and contexts

52

*/

53

declare const rootEslintConfig: Config[];

54

55

/**

56

* Default export (same as rootEslintConfig)

57

*/

58

declare const _default: Config[];

59

export default _default;

60

export { rootEslintConfig };

61

```

62

63

The configuration array includes:

64

65

1. **Settings** - Base language and parser configuration

66

2. **TypeScript** - Rules for `**/*.ts` files

67

3. **TypeScript-React** - Rules for `**/*.tsx` files

68

4. **Unit Tests** - Rules for `**/*.spec.ts` files

69

5. **Payload Config** - Rules for `*.config.ts` and `config.ts` files

70

71

### Deep Merge Utility

72

73

Utility function for recursively merging configuration objects with array handling.

74

75

```javascript { .api }

76

/**

77

* Recursively merges multiple objects, handling arrays and nested objects

78

* @param objs - Objects to merge (later objects take priority)

79

* @returns Merged object

80

*/

81

declare function deepMerge(...objs: any[]): any;

82

```

83

84

**Import:**

85

86

```javascript

87

import { deepMerge } from "@payloadcms/eslint-config/deepMerge.js";

88

```

89

90

**Usage Example:**

91

92

```javascript

93

import { deepMerge } from "@payloadcms/eslint-config/deepMerge.js";

94

95

const config1 = { rules: { "no-console": "warn" } };

96

const config2 = { rules: { "no-unused-vars": "error" } };

97

const merged = deepMerge(config1, config2);

98

// Result: { rules: { "no-console": "warn", "no-unused-vars": "error" } }

99

```

100

101

102

## Types

103

104

```javascript { .api }

105

/**

106

* ESLint flat configuration object

107

*/

108

interface Config {

109

name?: string;

110

files?: string[];

111

ignores?: string[];

112

languageOptions?: {

113

ecmaVersion?: string | number;

114

sourceType?: "script" | "module";

115

globals?: Record<string, boolean>;

116

parser?: any;

117

parserOptions?: Record<string, any>;

118

};

119

plugins?: Record<string, any>;

120

rules?: Record<string, string | number | Array<string | number | object>>;

121

settings?: Record<string, any>;

122

}

123

```

124

125

## Key Features

126

127

### Multi-file Type Support

128

- **TypeScript Files** (`.ts`): Core TypeScript linting with type-checking

129

- **React Components** (`.tsx`): React + TypeScript with accessibility rules

130

- **Test Files** (`.spec.ts`): Jest-specific rules for testing

131

- **Config Files** (`*.config.ts`): Relaxed rules for configuration files

132

133

### Integrated Plugin Ecosystem

134

- **TypeScript ESLint**: Type-aware linting and best practices

135

- **React/JSX**: Modern React patterns and hooks rules

136

- **Accessibility**: Comprehensive a11y checking via jsx-a11y

137

- **Jest**: Testing framework rules and DOM utilities

138

- **Import/Export**: Module organization and sorting

139

- **Prettier**: Code formatting integration

140

- **Perfectionist**: Automatic object property sorting

141

- **Regexp**: Regular expression linting

142

- **Payload Plugin**: Custom rules for Payload CMS patterns

143

144

### Rule Philosophy

145

- **Type Safety**: Emphasis on TypeScript best practices with type checking

146

- **Code Quality**: Consistent formatting and modern JavaScript patterns

147

- **Accessibility**: Comprehensive WCAG compliance for React components

148

- **Testing**: Best practices for Jest and DOM testing utilities

149

- **Payload-specific**: Custom rules preventing common CMS configuration mistakes

150

151

### Configuration Approach

152

- **Flat Config**: Uses ESLint 9.x flat configuration format

153

- **Composable**: Each configuration can be used independently

154

- **Extensible**: Designed to be extended with additional rules

155

- **Type-aware**: Leverages TypeScript compiler for advanced linting