1import js from "@eslint/js";
2import svelte from "eslint-plugin-svelte";
3import globals from "globals";
4import tseslint from "typescript-eslint";
5import svelteConfig from "./svelte.config.js";
6
7export default tseslint.config(
8 js.configs.recommended,
9 ...tseslint.configs.recommended,
10 ...svelte.configs.recommended,
11 {
12 languageOptions: {
13 globals: {
14 ...globals.browser,
15 },
16 },
17 },
18 {
19 files: ["**/*.svelte", "**/*.svelte.ts", "**/*.svelte.js"],
20 languageOptions: {
21 parserOptions: {
22 extraFileExtensions: [".svelte"],
23 parser: tseslint.parser,
24 svelteConfig,
25 },
26 },
27 },
28 {
29 files: ["**/*.{js,mjs,cjs,ts}"],
30 languageOptions: {
31 ecmaVersion: 2024,
32 sourceType: "module",
33 },
34 rules: {
35 // Modern TypeScript best practices
36 "@typescript-eslint/no-unused-vars": [
37 "error",
38 {
39 argsIgnorePattern: "^_",
40 varsIgnorePattern: "^_",
41 },
42 ],
43 "@typescript-eslint/no-explicit-any": "warn",
44 "@typescript-eslint/no-empty-function": "off",
45 "@typescript-eslint/consistent-type-imports": "error",
46 "@typescript-eslint/no-import-type-side-effects": "error",
47
48 // Modern JavaScript/TypeScript patterns
49 "prefer-const": "error",
50 "no-var": "error",
51 "object-shorthand": "error",
52 "prefer-template": "error",
53 },
54 },
55 {
56 files: ["**/*.js", "**/*.mjs"],
57 ...tseslint.configs.disableTypeChecked,
58 },
59);