import js from '@eslint/js'; import tsPlugin from '@typescript-eslint/eslint-plugin'; import tsParser from '@typescript-eslint/parser'; import sveltePlugin from 'eslint-plugin-svelte'; import svelteParser from 'svelte-eslint-parser'; export default [ js.configs.recommended, { files: ['**/*.{js,mjs,cjs,ts,svelte}'], languageOptions: { parser: tsParser, parserOptions: { sourceType: 'module', ecmaVersion: 2020, }, globals: { fetch: 'readonly', caches: 'readonly', URL: 'readonly', console: 'readonly', HTMLElement: 'readonly', HTMLImageElement: 'readonly', HTMLInputElement: 'readonly', HTMLTextAreaElement: 'readonly', HTMLSelectElement: 'readonly', HTMLDivElement: 'readonly', SVGSVGElement: 'readonly', navigator: 'readonly', window: 'readonly', document: 'readonly', Blob: 'readonly', Event: 'readonly', MouseEvent: 'readonly', TouchEvent: 'readonly', Touch: 'readonly', WheelEvent: 'readonly', KeyboardEvent: 'readonly', URLSearchParams: 'readonly', setTimeout: 'readonly', clearTimeout: 'readonly', setInterval: 'readonly', clearInterval: 'readonly', localStorage: 'readonly', atob: 'readonly', btoa: 'readonly', alert: 'readonly', prompt: 'readonly', confirm: 'readonly', XMLSerializer: 'readonly', Image: 'readonly', FileReader: 'readonly', performance: 'readonly', AbortController: 'readonly', AbortSignal: 'readonly', DOMParser: 'readonly', Element: 'readonly', Node: 'readonly', DragEvent: 'readonly', ServiceWorkerRegistration: 'readonly', Response: 'readonly', IDBDatabase: 'readonly', IDBOpenDBRequest: 'readonly', IDBObjectStore: 'readonly', IDBKeyRange: 'readonly', IDBRequest: 'readonly', IDBCursor: 'readonly', IDBCursorWithValue: 'readonly', indexedDB: 'readonly', $state: 'readonly', $derived: 'readonly', $effect: 'readonly', $props: 'readonly', $inspect: 'readonly', $host: 'readonly', }, }, plugins: { '@typescript-eslint': tsPlugin, svelte: sveltePlugin, }, rules: { ...tsPlugin.configs.recommended.rules, '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }], '@typescript-eslint/no-explicit-any': 'off', }, }, { files: ['**/*.svelte'], languageOptions: { parser: svelteParser, parserOptions: { parser: tsParser, }, }, plugins: { svelte: sveltePlugin, }, rules: { ...sveltePlugin.configs.recommended.rules, }, }, { files: ['bin/**/*.js'], languageOptions: { globals: { process: 'readonly', }, }, }, { files: ['static/sw.js'], languageOptions: { globals: { self: 'readonly', caches: 'readonly', fetch: 'readonly', URL: 'readonly', console: 'readonly', }, }, }, { ignores: [ 'node_modules/**', '.svelte-kit/**', 'build/**', 'dist/**', 'archive/**', 'desktop/frontend_dist/**', 'android/**', 'wailsjs/**', 'bin/**', ], }, ];