11/* eslint-env node */
2- require ( '@rushstack/eslint-patch/modern-module-resolution' )
3-
42module . exports = {
53 root : true ,
64 extends : [
7- 'plugin:vue/vue3-recommended' ,
85 'eslint:recommended' ,
9- 'plugin:@typescript-eslint/recommended' ,
10- 'plugin:@typescript-eslint/recommended-requiring-type-checking' ,
116 '@vue/eslint-config-typescript/recommended' ,
12- '@ vue/eslint-config-prettier/skip-formatting '
7+ 'plugin: vue/vue3-recommended '
138 ] ,
149 parser : 'vue-eslint-parser' ,
1510 parserOptions : {
1611 parser : '@typescript-eslint/parser' ,
1712 ecmaVersion : 'latest' ,
1813 sourceType : 'module' ,
19- project : [ './tsconfig.json' , './tsconfig.node.json' ] ,
20- tsconfigRootDir : __dirname ,
14+ project : './tsconfig.json' ,
2115 extraFileExtensions : [ '.vue' ]
2216 } ,
23- ignorePatterns : [ '.eslintrc.cjs' , 'dist' , 'node_modules' ] ,
17+ env : {
18+ browser : true ,
19+ es2022 : true ,
20+ node : true
21+ } ,
2422 rules : {
25- // Line length
26- 'max-len' : [ 'error' , {
27- code : 120 ,
28- ignoreComments : true ,
29- ignoreStrings : true ,
30- ignoreTemplateLiterals : true ,
31- ignoreRegExpLiterals : true
32- } ] ,
33-
34- // General rules
35- 'no-console' : process . env . NODE_ENV === 'production' ? 'warn' : 'off' ,
36- 'no-debugger' : process . env . NODE_ENV === 'production' ? 'error' : 'warn' ,
37- 'no-var' : 'error' ,
38- 'prefer-const' : 'error' ,
39- 'prefer-arrow-callback' : 'error' ,
40- 'eqeqeq' : [ 'error' , 'always' ] ,
41- 'curly' : [ 'error' , 'all' ] ,
42-
43- // TypeScript rules
23+ // TypeScript recommended overrides
4424 '@typescript-eslint/no-unused-vars' : [ 'error' , {
4525 argsIgnorePattern : '^_' ,
4626 varsIgnorePattern : '^_'
4727 } ] ,
4828 '@typescript-eslint/no-explicit-any' : 'warn' ,
49- '@typescript-eslint/explicit-function-return-type' : 'off' ,
50- '@typescript-eslint/explicit-module-boundary-types' : 'off' ,
51- '@typescript-eslint/no-non-null-assertion' : 'warn' ,
52- '@typescript-eslint/no-floating-promises' : 'error' ,
53- '@typescript-eslint/no-misused-promises' : 'error' ,
54- '@typescript-eslint/await-thenable' : 'error' ,
55- '@typescript-eslint/no-unnecessary-type-assertion' : 'error' ,
56- '@typescript-eslint/prefer-as-const' : 'error' ,
57- '@typescript-eslint/consistent-type-imports' : [ 'error' , {
58- prefer : 'type-imports'
59- } ] ,
60- // Relax rules for external library types
61- '@typescript-eslint/no-unsafe-assignment' : 'off' ,
62- '@typescript-eslint/no-unsafe-member-access' : 'off' ,
63- '@typescript-eslint/no-unsafe-call' : 'off' ,
64- '@typescript-eslint/no-unsafe-argument' : 'off' ,
65- '@typescript-eslint/restrict-template-expressions' : 'off' ,
29+ '@typescript-eslint/no-unsafe-assignment' : 'error' ,
30+ '@typescript-eslint/no-unsafe-member-access' : 'error' ,
31+ '@typescript-eslint/no-unsafe-call' : 'error' ,
32+ '@typescript-eslint/no-unsafe-return' : 'error' ,
33+ '@typescript-eslint/no-unsafe-argument' : 'error' ,
34+ '@typescript-eslint/explicit-function-return-type' : 'error' ,
35+ '@typescript-eslint/explicit-module-boundary-types' : 'error' ,
6636
67- // Vue rules
68- 'vue/multi-word-component-names' : 'off' ,
69- 'vue/no-unused-components' : 'error' ,
70- 'vue/no-unused-vars' : 'error' ,
37+ // Vue 3 recommended
38+ 'vue/multi-word-component-names' : 'off' , // Allow single-word component names
39+ 'vue/no-reserved-component-names' : 'error' ,
7140 'vue/component-tags-order' : [ 'error' , {
72- ' order' : [ 'script' , 'template' , 'style' ]
41+ order : [ 'script' , 'template' , 'style' ]
7342 } ] ,
74- 'vue/block-tag-newline' : 'error' ,
75- 'vue/component-name-in-template-casing' : [ 'error' , 'PascalCase' ] ,
76- 'vue/define-props-declaration' : [ 'error' , 'type-based' ] ,
77- 'vue/define-emits-declaration' : [ 'error' , 'type-based' ] ,
78- 'vue/no-empty-component-block' : 'error' ,
79- 'vue/padding-line-between-blocks' : 'error' ,
80- 'vue/prefer-separate-static-class' : 'error' ,
81- 'vue/prefer-true-attribute-shorthand' : 'error' ,
82- 'vue/v-on-function-call' : [ 'error' , 'never' ] ,
83- 'vue/no-useless-v-bind' : 'error' ,
84- 'vue/no-useless-mustaches' : 'error' ,
85- 'vue/no-constant-condition' : 'warn' ,
86- 'vue/require-macro-variable-name' : 'error' ,
87- 'vue/valid-define-options' : 'error' ,
88- 'vue/block-lang' : [ 'error' , {
89- 'script' : { 'lang' : 'ts' }
90- } ]
91- }
43+ 'vue/prefer-import-from-vue' : 'error' ,
44+ 'vue/no-deprecated-slot-attribute' : 'error' ,
45+ 'vue/no-deprecated-slot-scope-attribute' : 'error' ,
46+
47+ // General code quality
48+ 'no-console' : [ 'warn' , { allow : [ 'warn' , 'error' ] } ] ,
49+ 'no-debugger' : 'error' ,
50+ 'prefer-const' : 'error' ,
51+ 'no-var' : 'error'
52+ } ,
53+ overrides : [
54+ {
55+ files : [ '*.cjs' , '.eslintrc.cjs' ] ,
56+ env : {
57+ node : true
58+ } ,
59+ parserOptions : {
60+ project : null // Don't use TypeScript project for config files
61+ } ,
62+ rules : {
63+ '@typescript-eslint/no-var-requires' : 'off' ,
64+ '@typescript-eslint/no-unsafe-assignment' : 'off' ,
65+ '@typescript-eslint/no-unsafe-member-access' : 'off' ,
66+ '@typescript-eslint/no-unsafe-call' : 'off' ,
67+ '@typescript-eslint/no-unsafe-return' : 'off' ,
68+ '@typescript-eslint/no-unsafe-argument' : 'off'
69+ }
70+ }
71+ ] ,
72+ ignorePatterns : [
73+ 'dist/' ,
74+ 'node_modules/' ,
75+ '*.d.ts'
76+ ]
9277}
0 commit comments