275 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
			
		
		
	
	
			275 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
# @coze-arch/eslint-config
 | 
						|
 | 
						|
A comprehensive ESLint configuration package for the Coze architecture ecosystem, providing standardized linting rules for JavaScript, TypeScript, React, and Node.js projects.
 | 
						|
 | 
						|
## Features
 | 
						|
 | 
						|
- 🔧 **Multi-environment support**: Separate configurations for web, node, and base environments
 | 
						|
- 🎯 **TypeScript-first**: Full TypeScript support with advanced rules
 | 
						|
- ⚛️ **React optimized**: Built-in React hooks and XSS protection rules
 | 
						|
- 🔒 **Security focused**: Integrated security plugins and best practices
 | 
						|
- 🎨 **Prettier integration**: Seamless code formatting with Prettier
 | 
						|
- 📦 **Workspace-aware**: Import resolution for monorepo environments
 | 
						|
- 🚫 **Dependency control**: Built-in rules to prevent disallowed dependencies
 | 
						|
- 🧪 **Test-friendly**: Special configurations for test files
 | 
						|
 | 
						|
## Get Started
 | 
						|
 | 
						|
### Installation
 | 
						|
 | 
						|
```bash
 | 
						|
# Install the package
 | 
						|
pnpm add @coze-arch/eslint-config --save-dev
 | 
						|
 | 
						|
# Update workspace dependencies
 | 
						|
rush update
 | 
						|
```
 | 
						|
 | 
						|
### Basic Usage
 | 
						|
 | 
						|
Create an `eslint.config.js` file in your project root:
 | 
						|
 | 
						|
```javascript
 | 
						|
const { defineConfig } = require('@coze-arch/eslint-config');
 | 
						|
 | 
						|
module.exports = defineConfig({
 | 
						|
  packageRoot: __dirname,
 | 
						|
  preset: 'web', // or 'node' or 'base'
 | 
						|
});
 | 
						|
```
 | 
						|
 | 
						|
## API Reference
 | 
						|
 | 
						|
### `defineConfig(config)`
 | 
						|
 | 
						|
The main function to create ESLint configurations.
 | 
						|
 | 
						|
#### Parameters
 | 
						|
 | 
						|
- `config` (EnhanceESLintConfig): Configuration object
 | 
						|
 | 
						|
#### EnhanceESLintConfig Interface
 | 
						|
 | 
						|
```typescript
 | 
						|
interface EnhanceESLintConfig extends ESLintConfig {
 | 
						|
  /**
 | 
						|
   * Project root directory
 | 
						|
   */
 | 
						|
  packageRoot: string;
 | 
						|
  
 | 
						|
  /**
 | 
						|
   * Configuration preset mode
 | 
						|
   */
 | 
						|
  preset: 'web' | 'node' | 'base';
 | 
						|
  
 | 
						|
  /**
 | 
						|
   * Additional configuration overrides
 | 
						|
   */
 | 
						|
  overrides?: ESLintConfig[];
 | 
						|
  
 | 
						|
  /**
 | 
						|
   * Custom ignore patterns
 | 
						|
   */
 | 
						|
  ignores?: string[];
 | 
						|
  
 | 
						|
  /**
 | 
						|
   * Custom rules
 | 
						|
   */
 | 
						|
  rules?: Linter.RulesRecord;
 | 
						|
  
 | 
						|
  /**
 | 
						|
   * ESLint settings
 | 
						|
   */
 | 
						|
  settings?: any;
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
### Configuration Presets
 | 
						|
 | 
						|
#### Web Preset (`preset: 'web'`)
 | 
						|
 | 
						|
Optimized for React web applications:
 | 
						|
 | 
						|
```javascript
 | 
						|
module.exports = defineConfig({
 | 
						|
  packageRoot: __dirname,
 | 
						|
  preset: 'web',
 | 
						|
});
 | 
						|
```
 | 
						|
 | 
						|
**Includes:**
 | 
						|
- React and React Hooks rules
 | 
						|
- XSS protection with `eslint-plugin-risxss`
 | 
						|
- Browser globals
 | 
						|
- Restricted imports for architecture compliance
 | 
						|
 | 
						|
#### Node Preset (`preset: 'node'`)
 | 
						|
 | 
						|
Optimized for Node.js applications:
 | 
						|
 | 
						|
```javascript
 | 
						|
module.exports = defineConfig({
 | 
						|
  packageRoot: __dirname,
 | 
						|
  preset: 'node',
 | 
						|
});
 | 
						|
```
 | 
						|
 | 
						|
**Includes:**
 | 
						|
- Node.js globals and environment
 | 
						|
- Security plugin for Node.js
 | 
						|
- Server-side specific rules
 | 
						|
 | 
						|
#### Base Preset (`preset: 'base'`)
 | 
						|
 | 
						|
Minimal configuration for libraries:
 | 
						|
 | 
						|
```javascript
 | 
						|
module.exports = defineConfig({
 | 
						|
  packageRoot: __dirname,
 | 
						|
  preset: 'base',
 | 
						|
});
 | 
						|
```
 | 
						|
 | 
						|
**Includes:**
 | 
						|
- Core JavaScript and TypeScript rules
 | 
						|
- Import resolution
 | 
						|
- Common code quality rules
 | 
						|
 | 
						|
### Custom Configuration
 | 
						|
 | 
						|
#### Adding Custom Rules
 | 
						|
 | 
						|
```javascript
 | 
						|
module.exports = defineConfig({
 | 
						|
  packageRoot: __dirname,
 | 
						|
  preset: 'web',
 | 
						|
  rules: {
 | 
						|
    'no-console': 'warn',
 | 
						|
    '@typescript-eslint/no-unused-vars': 'error',
 | 
						|
  },
 | 
						|
});
 | 
						|
```
 | 
						|
 | 
						|
#### Adding Overrides
 | 
						|
 | 
						|
```javascript
 | 
						|
module.exports = defineConfig({
 | 
						|
  packageRoot: __dirname,
 | 
						|
  preset: 'web',
 | 
						|
  overrides: [
 | 
						|
    {
 | 
						|
      files: ['**/*.test.ts', '**/*.spec.ts'],
 | 
						|
      rules: {
 | 
						|
        'max-lines': 'off',
 | 
						|
      },
 | 
						|
    },
 | 
						|
  ],
 | 
						|
});
 | 
						|
```
 | 
						|
 | 
						|
#### Custom Ignores
 | 
						|
 | 
						|
```javascript
 | 
						|
module.exports = defineConfig({
 | 
						|
  packageRoot: __dirname,
 | 
						|
  preset: 'web',
 | 
						|
  ignores: [
 | 
						|
    'custom-build/**',
 | 
						|
    'temp/**',
 | 
						|
  ],
 | 
						|
});
 | 
						|
```
 | 
						|
 | 
						|
### CLI Scripts
 | 
						|
 | 
						|
The package provides convenient CLI scripts:
 | 
						|
 | 
						|
#### ESLint Script
 | 
						|
 | 
						|
```bash
 | 
						|
# Using the built-in eslint script
 | 
						|
npx eslint ./src
 | 
						|
 | 
						|
# Using the reslint alias
 | 
						|
npx reslint ./src
 | 
						|
```
 | 
						|
 | 
						|
#### Prettier Script
 | 
						|
 | 
						|
```bash
 | 
						|
# Format code with Prettier
 | 
						|
npx prettier --write ./src
 | 
						|
```
 | 
						|
 | 
						|
## Development
 | 
						|
 | 
						|
### Project Structure
 | 
						|
 | 
						|
```
 | 
						|
config/eslint-config/
 | 
						|
├── src/
 | 
						|
│   ├── index.js              # Main entry point
 | 
						|
│   └── define-config.ts      # Configuration function
 | 
						|
├── rules/                    # Rule configurations
 | 
						|
│   ├── common-standard.js    # Common rules
 | 
						|
│   ├── import.js            # Import rules
 | 
						|
│   ├── js-standard.js       # JavaScript rules
 | 
						|
│   ├── ts-standard.js       # TypeScript rules
 | 
						|
│   └── test-standard.js     # Test file rules
 | 
						|
├── scripts/
 | 
						|
│   ├── reslint.sh           # ESLint wrapper script
 | 
						|
│   └── rprettier.sh         # Prettier wrapper script
 | 
						|
├── eslint.config.base.js    # Base configuration
 | 
						|
├── eslint.config.web.js     # Web configuration
 | 
						|
├── eslint.config.node.js    # Node.js configuration
 | 
						|
└── package.json
 | 
						|
```
 | 
						|
 | 
						|
### Building
 | 
						|
 | 
						|
```bash
 | 
						|
# Build the package
 | 
						|
rush build --to @coze-arch/eslint-config
 | 
						|
 | 
						|
# Run linting
 | 
						|
rush lint --to @coze-arch/eslint-config
 | 
						|
```
 | 
						|
 | 
						|
### Testing
 | 
						|
 | 
						|
```bash
 | 
						|
# Run tests
 | 
						|
rush test --to @coze-arch/eslint-config
 | 
						|
```
 | 
						|
 | 
						|
## Dependencies
 | 
						|
 | 
						|
### Main Dependencies
 | 
						|
 | 
						|
- **@typescript-eslint/eslint-plugin**: TypeScript-specific linting rules
 | 
						|
- **@typescript-eslint/parser**: TypeScript parser for ESLint
 | 
						|
- **eslint-plugin-react**: React-specific linting rules
 | 
						|
- **eslint-plugin-react-hooks**: Rules for React Hooks
 | 
						|
- **eslint-plugin-prettier**: Prettier integration
 | 
						|
- **eslint-plugin-import**: Import/export syntax validation
 | 
						|
- **eslint-plugin-security**: Security-focused linting rules
 | 
						|
- **eslint-plugin-risxss**: XSS prevention for React
 | 
						|
 | 
						|
### Internal Dependencies
 | 
						|
 | 
						|
- **@coze-arch/eslint-plugin**: Custom rules for Coze architecture
 | 
						|
- **@coze-arch/ts-config**: TypeScript configuration
 | 
						|
 | 
						|
### Build Tools
 | 
						|
 | 
						|
- **sucrase**: Fast TypeScript transpilation
 | 
						|
- **prettier**: Code formatting
 | 
						|
- **eslint**: Core linting engine
 | 
						|
 | 
						|
## License
 | 
						|
 | 
						|
Internal package for Coze architecture ecosystem.
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
For more information about ESLint configuration, visit the [ESLint documentation](https://eslint.org/docs/user-guide/configuring/). |