96 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			96 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
|  | /** | ||
|  |  * Copyright (c) Microsoft Corporation. | ||
|  |  * | ||
|  |  * Licensed under the Apache License, Version 2.0 (the "License"); | ||
|  |  * you may not use this file except in compliance with the License. | ||
|  |  * You may obtain a copy of the License at | ||
|  |  * | ||
|  |  * http://www.apache.org/licenses/LICENSE-2.0
 | ||
|  |  * | ||
|  |  * Unless required by applicable law or agreed to in writing, software | ||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
|  |  * See the License for the specific language governing permissions and | ||
|  |  * limitations under the License. | ||
|  |  */ | ||
|  | 
 | ||
|  | import { fixupConfigRules } from '@eslint/compat'; | ||
|  | import { FlatCompat } from '@eslint/eslintrc'; | ||
|  | import js from '@eslint/js'; | ||
|  | import typescriptEslint from '@typescript-eslint/eslint-plugin'; | ||
|  | import tsParser from '@typescript-eslint/parser'; | ||
|  | import notice from 'eslint-plugin-notice'; | ||
|  | import path from 'path'; | ||
|  | import { fileURLToPath } from 'url'; | ||
|  | import stylistic from '@stylistic/eslint-plugin'; | ||
|  | import { baseRules } from './eslint.config.mjs'; | ||
|  | 
 | ||
|  | const __filename = fileURLToPath(import.meta.url); | ||
|  | const __dirname = path.dirname(__filename); | ||
|  | 
 | ||
|  | const compat = new FlatCompat({ | ||
|  |   baseDirectory: __dirname, | ||
|  |   recommendedConfig: js.configs.recommended, | ||
|  |   allConfig: js.configs.all | ||
|  | }); | ||
|  | 
 | ||
|  | const baseConfig = fixupConfigRules(compat.extends('plugin:react/recommended', 'plugin:react-hooks/recommended')); | ||
|  | 
 | ||
|  | const plugins = { | ||
|  |   '@stylistic': stylistic, | ||
|  |   '@typescript-eslint': typescriptEslint, | ||
|  |   notice, | ||
|  | }; | ||
|  | 
 | ||
|  | const ignores = [ | ||
|  |   '.github/', | ||
|  |   '*.js', | ||
|  |   '**/.cache/', | ||
|  |   '**/*.d.ts', | ||
|  |   '**/dist/**', | ||
|  |   'index.d.ts', | ||
|  |   'node_modules/', | ||
|  |   'output/', | ||
|  |   'packages/*/lib/', | ||
|  |   'test-results/', | ||
|  |   'tests/', | ||
|  |   'utils/', | ||
|  | ]; | ||
|  | 
 | ||
|  | export default [ | ||
|  |   { ignores }, | ||
|  |   {  | ||
|  |     plugins, | ||
|  |     settings: { | ||
|  |       react: { version: 'detect' }, | ||
|  |     } | ||
|  |   }, | ||
|  |   ...baseConfig, | ||
|  |   packageSection('html-reporter'), | ||
|  |   packageSection('recorder'), | ||
|  |   packageSection('trace-viewer'), | ||
|  | ]; | ||
|  | 
 | ||
|  | function packageSection(packageName) { | ||
|  |   return { | ||
|  |     files: [ | ||
|  |       `packages/${packageName}/src/**/*.ts`, | ||
|  |       `packages/${packageName}/src/**/*.tsx`, | ||
|  |       `packages/web/src/**/*.ts`, | ||
|  |       `packages/web/src/**/*.tsx`, | ||
|  |     ], | ||
|  |     languageOptions: { | ||
|  |       parser: tsParser, | ||
|  |       ecmaVersion: 9, | ||
|  |       sourceType: 'module', | ||
|  |       parserOptions: { | ||
|  |         project: path.join(__dirname, 'packages', packageName, 'tsconfig.json'), | ||
|  |       }, | ||
|  |     }, | ||
|  |     rules: { | ||
|  |       ...baseRules, | ||
|  |       'no-console': 2, | ||
|  |     } | ||
|  |   }; | ||
|  | } |