eslint.config.js
Rama main · réplica de lectura del repositorio original.
// @ts-check
import eslintComments from '@eslint-community/eslint-plugin-eslint-comments/configs';
import js from '@eslint/js';
import prettier from 'eslint-config-prettier';
import jsxA11y from 'eslint-plugin-jsx-a11y';
import reactHooks from 'eslint-plugin-react-hooks';
import globals from 'globals';
import tseslint from 'typescript-eslint';
/**
* One flat config for the whole monorepo. Packages run `eslint .` from their own folder and
* ESLint finds this file by walking up, so a new package never needs a root edit.
*/
export default tseslint.config(
{
ignores: [
'**/node_modules/**',
'**/dist/**',
'**/build/**',
'**/coverage/**',
'**/playwright-report/**',
'**/test-results/**',
'**/blob-report/**',
'**/.vite/**',
'**/src-tauri/target/**',
'**/src-tauri/gen/**',
'docs/.vitepress/cache/**',
'docs/.vitepress/dist/**',
'packages/importers/fixtures/**',
'examples/demo-workspace/**',
],
},
js.configs.recommended,
...tseslint.configs.recommended,
eslintComments.recommended,
{
files: ['**/*.{ts,tsx,js,jsx,mjs,cjs}'],
languageOptions: {
ecmaVersion: 2024,
sourceType: 'module',
globals: { ...globals.browser, ...globals.node, ...globals.es2024 },
},
rules: {
'@typescript-eslint/no-explicit-any': 'error',
'@typescript-eslint/consistent-type-imports': [
'error',
{ prefer: 'type-imports', fixStyle: 'inline-type-imports' },
],
'@typescript-eslint/no-unused-vars': [
'error',
{
argsIgnorePattern: '^_',
varsIgnorePattern: '^_',
caughtErrorsIgnorePattern: '^_',
ignoreRestSiblings: true,
},
],
'@typescript-eslint/ban-ts-comment': [
'error',
{
'ts-expect-error': 'allow-with-description',
'ts-ignore': true,
'ts-nocheck': true,
minimumDescriptionLength: 10,
},
],
'@typescript-eslint/no-non-null-assertion': 'error',
'@eslint-community/eslint-comments/require-description': [
'error',
{ ignore: ['eslint-enable'] },
],
'@eslint-community/eslint-comments/no-unused-disable': 'error',
'no-eval': 'error',
'no-implied-eval': 'error',
'no-new-func': 'error',
'no-console': ['error', { allow: ['warn', 'error', 'info'] }],
eqeqeq: ['error', 'always', { null: 'ignore' }],
'prefer-const': 'error',
'no-var': 'error',
'object-shorthand': 'error',
},
},
{
files: ['**/*.{tsx,jsx}'],
...jsxA11y.flatConfigs.recommended,
},
{
files: ['**/*.{ts,tsx,js,jsx}'],
plugins: { 'react-hooks': reactHooks },
rules: {
'react-hooks/rules-of-hooks': 'error',
'react-hooks/exhaustive-deps': 'error',
},
},
{
// Node-side code (server, CLIs, scripts, configs, tests) may log freely.
files: [
'apps/server/**',
'scripts/**',
'**/*.config.{ts,js,mjs}',
'packages/create-tessera-plugin/**',
'packages/testkit/**',
'e2e/**',
'**/*.bench.ts',
],
rules: { 'no-console': 'off' },
},
prettier,
);