1+ // import prettier from "eslint-config-prettier";
2+ import js from "@eslint/js" ;
3+ import svelte from "eslint-plugin-svelte" ;
4+ import globals from "globals" ;
5+ import ts from "typescript-eslint" ;
6+ import svelteConfig from "./svelte.config.js" ;
7+
8+
9+ export default ts . config (
10+ js . configs . recommended ,
11+ ...ts . configs . recommended ,
12+ ...svelte . configs [ "flat/recommended" ] ,
13+ // prettier,
14+ // ...svelte.configs["flat/prettier"],
15+ {
16+ languageOptions : {
17+ globals : {
18+ ...globals . browser ,
19+ ...globals . node
20+ }
21+ }
22+ } ,
23+ {
24+ files : [ "**/*.svelte" ] ,
25+
26+ languageOptions : {
27+ parserOptions : {
28+ projectService : true ,
29+ extraFileExtensions : [ ".svelte" ] ,
30+ parser : ts . parser ,
31+ svelteConfig
32+ }
33+ }
34+ } ,
35+ {
36+ ignores : [ "build/" , ".svelte-kit/" , "dist/" , "wailsjs/" ]
37+ } ,
38+ {
39+ rules : {
40+ "accessor-pairs" : "error" ,
41+ "block-spacing" : [ "error" , "never" ] ,
42+ "brace-style" : [ "error" , "stroustrup" , { allowSingleLine : true } ] ,
43+ "curly" : [ "error" , "multi-line" , "consistent" ] ,
44+ "dot-location" : [ "error" , "property" ] ,
45+ "dot-notation" : "error" ,
46+ "func-call-spacing" : "error" ,
47+ "handle-callback-err" : "error" ,
48+ "key-spacing" : "error" ,
49+ "keyword-spacing" : "error" ,
50+ // "new-cap": ["error", {newIsCap: true}],
51+ "no-array-constructor" : "error" ,
52+ "no-caller" : "error" ,
53+ "no-console" : "error" ,
54+ "no-duplicate-imports" : "error" ,
55+ "no-else-return" : "error" ,
56+ "no-eval" : "error" ,
57+ "no-floating-decimal" : "error" ,
58+ "no-implied-eval" : "error" ,
59+ "no-iterator" : "error" ,
60+ "no-label-var" : "error" ,
61+ "no-labels" : "error" ,
62+ "no-lone-blocks" : "error" ,
63+ "no-mixed-spaces-and-tabs" : "error" ,
64+ "no-multi-spaces" : "error" ,
65+ "no-multi-str" : "error" ,
66+ "no-new" : "error" ,
67+ "no-new-func" : "error" ,
68+ "no-new-object" : "error" ,
69+ "no-new-wrappers" : "error" ,
70+ "no-octal-escape" : "error" ,
71+ "no-path-concat" : "error" ,
72+ "no-proto" : "error" ,
73+ "no-prototype-builtins" : "off" ,
74+ "no-redeclare" : [ "error" , { builtinGlobals : true } ] ,
75+ "no-self-compare" : "error" ,
76+ "no-sequences" : "error" ,
77+ "no-shadow" : [ "warn" , { builtinGlobals : false , hoist : "functions" } ] ,
78+ "no-tabs" : "error" ,
79+ "no-template-curly-in-string" : "error" ,
80+ "no-throw-literal" : "error" ,
81+ "no-undef" : "error" ,
82+ "no-undef-init" : "error" ,
83+ "no-unmodified-loop-condition" : "error" ,
84+ "no-unneeded-ternary" : "error" ,
85+ "no-useless-call" : "error" ,
86+ "no-useless-computed-key" : "error" ,
87+ "no-useless-constructor" : "error" ,
88+ "no-useless-rename" : "error" ,
89+ "no-var" : "error" ,
90+ "no-whitespace-before-property" : "error" ,
91+ "object-curly-spacing" : [ "error" , "never" , { objectsInObjects : false } ] ,
92+ "object-property-newline" : [ "error" , { allowAllPropertiesOnSameLine : true } ] ,
93+ "operator-linebreak" : [
94+ "error" ,
95+ "none" ,
96+ { overrides : { "?" : "before" , ":" : "before" , "&&" : "before" } }
97+ ] ,
98+ "prefer-const" : "error" ,
99+ "quote-props" : [ "error" , "consistent-as-needed" , { keywords : true } ] ,
100+ "quotes" : [ "error" , "double" , { allowTemplateLiterals : true } ] ,
101+ "rest-spread-spacing" : "error" ,
102+ "semi" : "error" ,
103+ "semi-spacing" : "error" ,
104+ "space-before-blocks" : "error" ,
105+ "space-in-parens" : "error" ,
106+ "space-infix-ops" : "error" ,
107+ "space-unary-ops" : [
108+ "error" ,
109+ { words : true , nonwords : false , overrides : { "typeof" : false } }
110+ ] ,
111+ "spaced-comment" : [ "error" , "always" , { exceptions : [ "-" , "*" ] } ] ,
112+ "template-curly-spacing" : "error" ,
113+ "wrap-iife" : [ "error" , "inside" ] ,
114+ "yield-star-spacing" : "error" ,
115+ "yoda" : "error"
116+ } ,
117+ } ,
118+ {
119+ rules : {
120+ "@typescript-eslint/no-unused-vars" : [ "error" , { argsIgnorePattern : "^_" , varsIgnorePattern : "^_" } ]
121+ }
122+ } ,
123+ {
124+ rules : {
125+ // Errors
126+ "svelte/infinite-reactive-loop" : "error" ,
127+ "svelte/no-dom-manipulating" : "off" ,
128+ "svelte/no-dupe-else-if-blocks" : "error" ,
129+ "svelte/no-dupe-on-directives" : "error" ,
130+ "svelte/no-dupe-style-properties" : "error" ,
131+ "svelte/no-dupe-use-directives" : "error" ,
132+ "svelte/no-dynamic-slot-name" : "error" ,
133+ "svelte/no-export-load-in-svelte-module-in-kit-pages" : "error" ,
134+ "svelte/no-not-function-handler" : "error" ,
135+ "svelte/no-object-in-text-mustaches" : "error" ,
136+ "svelte/no-reactive-reassign" : "error" ,
137+ "svelte/no-shorthand-style-property-overrides" : "error" ,
138+ "svelte/no-store-async" : "error" ,
139+ "svelte/no-unknown-style-directive-property" : "error" ,
140+ "svelte/require-store-callbacks-use-set-param" : "error" ,
141+ "svelte/require-store-reactive-access" : "error" ,
142+ "svelte/valid-compile" : "error" ,
143+ "svelte/valid-prop-names-in-kit-pages" : "error" ,
144+
145+ // Security
146+ "svelte/no-at-html-tags" : "error" ,
147+ "svelte/no-target-blank" : "error" ,
148+
149+ // Best Practices
150+ "svelte/block-lang" : [ "error" , { script : "ts" } ] ,
151+ "svelte/button-has-type" : "error" ,
152+ "svelte/no-at-debug-tags" : "error" ,
153+ "svelte/no-ignored-unsubscribe" : "error" ,
154+ "svelte/no-immutable-reactive-statements" : "error" ,
155+ "svelte/no-inline-styles" : "off" ,
156+ "svelte/no-reactive-functions" : "error" ,
157+ "svelte/no-reactive-literals" : "error" ,
158+ "svelte/no-svelte-internal" : "error" ,
159+ "svelte/no-unused-class-name" : "error" ,
160+ "svelte/no-unused-svelte-ignore" : "error" ,
161+ "svelte/no-useless-mustaches" : "error" ,
162+ "svelte/prefer-destructured-store-props" : "error" ,
163+ "svelte/require-each-key" : "error" ,
164+ "svelte/require-event-dispatcher-types" : "error" ,
165+ "svelte/require-optimized-style-attribute" : "error" ,
166+ "svelte/require-stores-init" : "error" ,
167+ "svelte/valid-each-key" : "error" ,
168+
169+ // Stylistic Issues
170+ "svelte/derived-has-same-inputs-outputs" : "error" ,
171+ "svelte/first-attribute-linebreak" : [ "error" , { multiline : "below" , singleline : "beside" } ] ,
172+ "svelte/html-closing-bracket-spacing" : "error" ,
173+ "svelte/html-quotes" : [ "error" , { prefer : "double" } ] ,
174+ "svelte/html-self-closing" : [ "error" , { "void" : "always" , "component" : "always" , "svelte" : "always" , "normal" : "ignore" } ] ,
175+ "svelte/indent" : "off" ,
176+ "svelte/max-attributes-per-line" : "off" ,
177+ "svelte/mustache-spacing" : "error" ,
178+ "svelte/no-extra-reactive-curlies" : "error" ,
179+ // "svelte/no-restricted-html-elements": "error",
180+ "svelte/no-spaces-around-equal-signs-in-attribute" : "error" ,
181+ "svelte/prefer-class-directive" : [ "error" , { prefer : "always" } ] ,
182+ "svelte/prefer-style-directive" : "error" ,
183+ "svelte/shorthand-attribute" : "error" ,
184+ "svelte/shorthand-directive" : "error" ,
185+ "svelte/sort-attributes" : "off" ,
186+ "svelte/spaced-html-comment" : "error" ,
187+
188+ // Extension Rules
189+ "svelte/no-inner-declarations" : "error" ,
190+ "svelte/no-trailing-spaces" : "error" ,
191+
192+ // SvelteKit
193+ "svelte/no-goto-without-base" : "error" ,
194+
195+ // System
196+ "svelte/comment-directive" : [ "error" , { reportUnusedDisableDirectives : true } ] ,
197+ "svelte/system" : "error" ,
198+ } ,
199+ languageOptions : {
200+ globals : {
201+ __INSTALLER_LICENSE__ : "readonly" ,
202+ __APP_VERSION__ : "readonly"
203+ }
204+ }
205+ }
206+ ) ;
0 commit comments