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/). |