import js from '@eslint/js'; import tseslint from '@typescript-eslint/eslint-plugin'; import tsparser from '@typescript-eslint/parser'; export default [ { ignores: [ 'dist/**', 'node_modules/**', 'coverage/**', '*.config.js', '*.config.ts', '**/dist/**', '__LOCAL_LLMs/**', ], }, js.configs.recommended, { files: ['**/*.ts', '**/*.tsx'], languageOptions: { parser: tsparser, parserOptions: { ecmaVersion: 2022, sourceType: 'module', // project: true, // Disabled for now }, globals: { process: 'readonly', Buffer: 'readonly', __dirname: 'readonly', __filename: 'readonly', Headers: 'readonly', TextEncoder: 'readonly', TextDecoder: 'readonly', RequestInit: 'readonly', HeadersInit: 'readonly', Response: 'readonly', Request: 'readonly', fetch: 'readonly', console: 'readonly', performance: 'readonly', AbortSignal: 'readonly', AbortController: 'readonly', setTimeout: 'readonly', clearTimeout: 'readonly', setInterval: 'readonly', clearInterval: 'readonly', navigator: 'readonly', document: 'readonly', window: 'readonly', expect: 'readonly', describe: 'readonly', it: 'readonly', test: 'readonly', beforeEach: 'readonly', afterEach: 'readonly', beforeAll: 'readonly', afterAll: 'readonly', crypto: 'readonly', CryptoKey: 'readonly', SubtleCrypto: 'readonly', AesGcmParams: 'readonly', Crypto: 'readonly', ArrayBufferView: 'readonly', indexedDB: 'readonly', IDBDatabase: 'readonly', IDBRequest: 'readonly', IDBTransaction: 'readonly', IDBObjectStore: 'readonly', Blob: 'readonly', File: 'readonly', FormData: 'readonly', URLSearchParams: 'readonly', URL: 'readonly', BodyInit: 'readonly', ReadableStream: 'readonly', localStorage: 'readonly', sessionStorage: 'readonly', ReactNode: 'readonly', React: 'readonly', JSX: 'readonly', HTMLElement: 'readonly', HTMLButtonElement: 'readonly', HTMLSpanElement: 'readonly', HTMLDivElement: 'readonly', HTMLInputElement: 'readonly', HTMLFormElement: 'readonly', HTMLAnchorElement: 'readonly', HTMLImageElement: 'readonly', HTMLTextAreaElement: 'readonly', HTMLSelectElement: 'readonly', HTMLLabelElement: 'readonly', Element: 'readonly', Event: 'readonly', KeyboardEvent: 'readonly', KeyboardEventInit: 'readonly', MouseEvent: 'readonly', FocusEvent: 'readonly', CustomEvent: 'readonly', StorageEvent: 'readonly', MediaQueryList: 'readonly', MutationObserver: 'readonly', ResizeObserver: 'readonly', IntersectionObserver: 'readonly', EventTarget: 'readonly', NodeList: 'readonly', DOMRect: 'readonly', SVGElement: 'readonly', }, }, plugins: { '@typescript-eslint': tseslint, }, rules: { // TypeScript specific rules '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }], '@typescript-eslint/explicit-function-return-type': 'off', '@typescript-eslint/explicit-module-boundary-types': 'off', '@typescript-eslint/no-explicit-any': 'warn', // General rules 'no-console': 'warn', 'no-debugger': 'error', 'prefer-const': 'error', 'no-var': 'error', 'no-unused-vars': 'off', // Use TypeScript version // Import rules - disabled for now // 'sort-imports': ['error', { ignoreDeclarationSort: true }], }, }, ];