@flarian/frontend-preset 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,14 @@
1
+ import jsPlugin from '@eslint/js';
2
+
3
+ import esLintJavaScriptRules from './rules/javascript.mjs';
4
+ import esLintStylisticRules from './rules/stylistic.mjs';
5
+
6
+ /** @type {import('eslint').Linter.Config[]} */
7
+ export default [
8
+ {
9
+ files: ['**/*.{js,ts,jsx,tsx,cjs,mjs}'],
10
+ },
11
+ jsPlugin.configs.recommended,
12
+ esLintJavaScriptRules,
13
+ esLintStylisticRules,
14
+ ];
@@ -0,0 +1,4 @@
1
+ import esLintImportSortRules from './rules/import-sort.mjs';
2
+
3
+ /** @type {import('eslint').Linter.Config[]} */
4
+ export default [esLintImportSortRules];
package/eslint/index.mjs CHANGED
@@ -1,5 +1,4 @@
1
- export default [
2
- {
3
- extends: ['plugin:vue/recommended', 'prettier']
4
- }
5
- ];
1
+ export { default as baseRules } from './base.mjs';
2
+ export { default as importSortRules } from './import-sort.mjs';
3
+ export { default as jsxRules } from './jsx.mjs';
4
+ export { default as jsonRules } from './json.mjs';
@@ -0,0 +1,13 @@
1
+ import pluginJsonc from 'eslint-plugin-jsonc';
2
+
3
+ import esLintJsonRules from './rules/json.mjs';
4
+ import esLintJsonPackageRules from './rules/json.package.mjs';
5
+ import esLintJsonTsconfigRules from './rules/json.tsconfig.mjs';
6
+
7
+ /** @type {import('eslint').Linter.Config[]} */
8
+ export default [
9
+ ...pluginJsonc.configs['flat/all'],
10
+ esLintJsonRules,
11
+ esLintJsonPackageRules,
12
+ esLintJsonTsconfigRules,
13
+ ];
package/eslint/jsx.mjs ADDED
@@ -0,0 +1,4 @@
1
+ import esLintStylisticJsxRules from './rules/jsx.mjs';
2
+
3
+ /** @type {import('eslint').Linter.Config[]} */
4
+ export default [esLintStylisticJsxRules];
@@ -0,0 +1,32 @@
1
+ import simpleImportSort from 'eslint-plugin-simple-import-sort';
2
+
3
+ /** @type {import('eslint').Linter.Config} */
4
+ export default {
5
+ plugins: { '@simple-import-sort': simpleImportSort },
6
+ rules: {
7
+ '@simple-import-sort/imports': [
8
+ 'warn',
9
+ {
10
+ groups: [
11
+ ['^', '^@'],
12
+
13
+ ['^\\./'],
14
+
15
+ ['^.+\\.(.(js|ts))$'],
16
+
17
+ ['^~'],
18
+
19
+ ['^.+\\.(.(vue|jsx|tsx))$'],
20
+
21
+ ['^~/types'],
22
+
23
+ ['^.+\\.(module.(less|sass|scss|css))$'],
24
+
25
+ ['^.+\\.(gif|png|svg|jpg)$'],
26
+
27
+ ['^\\u0000'],
28
+ ],
29
+ },
30
+ ],
31
+ },
32
+ };
@@ -0,0 +1,53 @@
1
+ /** @type {import('eslint').Linter.Config} */
2
+ export default {
3
+ rules: {
4
+ 'arrow-body-style': ['error', 'as-needed'],
5
+ curly: 'error',
6
+ 'func-names': ['error', 'always'],
7
+ 'no-alert': 'error',
8
+ 'no-console': 'error',
9
+ 'no-var': 'error',
10
+ 'no-duplicate-imports': [
11
+ 'error',
12
+ {
13
+ includeExports: true,
14
+ },
15
+ ],
16
+ 'no-magic-numbers': [
17
+ 'error',
18
+ {
19
+ ignore: [-1, 0, 1],
20
+ ignoreArrayIndexes: true,
21
+ ignoreDefaultValues: true,
22
+ enforceConst: true,
23
+ },
24
+ ],
25
+ 'no-plusplus': [
26
+ 'error',
27
+ {
28
+ allowForLoopAfterthoughts: true,
29
+ },
30
+ ],
31
+ 'no-restricted-syntax': [
32
+ 'error',
33
+ {
34
+ selector: 'ForInStatement',
35
+ message: 'for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array.',
36
+ },
37
+ {
38
+ selector: 'LabeledStatement',
39
+ message: 'Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.',
40
+ },
41
+ {
42
+ selector: 'WithStatement',
43
+ message: '`with` is disallowed in strict mode because it makes code impossible to predict and optimize.',
44
+ },
45
+ ],
46
+ 'no-unused-expressions': [
47
+ 'error',
48
+ {
49
+ allowShortCircuit: true,
50
+ },
51
+ ],
52
+ },
53
+ };
@@ -0,0 +1,27 @@
1
+ import pluginJsonc from 'eslint-plugin-jsonc';
2
+
3
+ /** @type {import('eslint').Linter.Config} */
4
+ export default {
5
+ files: ['**/*.json'],
6
+ plugins: { pluginJsonc },
7
+ rules: {
8
+ 'jsonc/indent': ['warn', 'tab'], // Используем табуляцию
9
+ 'jsonc/no-comments': 'off', // Разрешаем комментарии
10
+ 'jsonc/comma-dangle': ['error', 'never'], // Запрет висячих запятых
11
+ 'jsonc/key-name-casing': [
12
+ 'error',
13
+ {
14
+ camelCase: false,
15
+ PascalCase: false,
16
+ SCREAMING_SNAKE_CASE: false,
17
+ 'kebab-case': false,
18
+ snake_case: false,
19
+ ignores: [],
20
+ },
21
+ ],
22
+ 'jsonc/object-curly-spacing': ['warn', 'always'],
23
+ 'jsonc/array-element-newline': ['error', 'consistent'],
24
+ 'jsonc/array-bracket-newline': ['warn', 'consistent'],
25
+ 'jsonc/sort-keys': ['warn', 'asc', { caseSensitive: true, natural: false, minKeys: 10 }],
26
+ },
27
+ };
@@ -0,0 +1,51 @@
1
+ import pluginJsonc from 'eslint-plugin-jsonc';
2
+
3
+ /** @type {import('eslint').Linter.Config} */
4
+ export default {
5
+ files: ['**/package.json'],
6
+ plugins: { pluginJsonc },
7
+ rules: {
8
+ 'jsonc/sort-keys': [
9
+ 'warn',
10
+ {
11
+ pathPattern: '^$',
12
+ order: [
13
+ 'name',
14
+ 'version',
15
+ 'license',
16
+ 'author',
17
+ 'keywords',
18
+ 'homepage',
19
+ 'repository',
20
+ 'contributors',
21
+ 'funding',
22
+ 'private',
23
+ 'publishConfig',
24
+ 'type',
25
+ 'files',
26
+ 'scripts',
27
+ 'dependencies',
28
+ 'devDependencies',
29
+ 'peerDependencies',
30
+ 'optionalDependencies',
31
+ 'bundledDependencies',
32
+ ],
33
+ },
34
+ {
35
+ pathPattern: '^(?:dev|peer|optional|bundled)?[Dd]ependencies$',
36
+ order: ['type', 'name'],
37
+ },
38
+ {
39
+ pathPattern: '^scripts$',
40
+ order: [
41
+ 'build',
42
+ 'test',
43
+ 'lint',
44
+ 'start',
45
+ 'prebuild',
46
+ 'pretest',
47
+ ],
48
+ },
49
+ ],
50
+ },
51
+ };
@@ -0,0 +1,56 @@
1
+ import pluginJsonc from 'eslint-plugin-jsonc';
2
+
3
+ /** @type {import('eslint').Linter.Config} */
4
+ export default {
5
+ files: ['**/tsconfig*.json'],
6
+ plugins: { pluginJsonc },
7
+ rules: {
8
+ 'jsonc/sort-keys': [
9
+ 'warn',
10
+ {
11
+ pathPattern: '^$',
12
+ order: [
13
+ 'compilerOptions',
14
+ 'extends',
15
+ 'include',
16
+ 'exclude',
17
+ 'files',
18
+ 'references',
19
+ ],
20
+ },
21
+ {
22
+ pathPattern: '^compilerOptions$',
23
+ order: [
24
+ 'target',
25
+ 'lib',
26
+ 'module',
27
+ 'moduleResolution',
28
+ 'esModuleInterop',
29
+ 'skipLibCheck',
30
+ 'forceConsistentCasingInFileNames',
31
+ 'strict',
32
+ 'noUnusedLocals',
33
+ 'noUnusedParameters',
34
+ 'noFallthroughCasesInSwitch',
35
+ 'noUncheckedSideEffectImports',
36
+ 'allowJs',
37
+ 'checkJs',
38
+ 'jsx',
39
+ 'resolveJsonModule',
40
+ 'isolatedModules',
41
+ 'noEmit',
42
+ 'outDir',
43
+ 'baseUrl',
44
+ 'paths',
45
+ 'typeRoots',
46
+ 'types',
47
+ 'plugins',
48
+ ],
49
+ },
50
+ {
51
+ pathPattern: '^references$',
52
+ order: ['path'],
53
+ },
54
+ ],
55
+ },
56
+ };
@@ -0,0 +1,173 @@
1
+ import stylisticJs from '@stylistic/eslint-plugin';
2
+
3
+ /** @type {import('eslint').Linter.Config} */
4
+ export default {
5
+ plugins: { '@stylistic': stylisticJs },
6
+ rules: {
7
+
8
+ /**
9
+ * Принудительное или запретительное использование пробелов внутри фигурных скобок в атрибутах и выражениях JSX
10
+ * https://eslint.style/rules/default/jsx-child-element-spacing
11
+ */
12
+ '@stylistic/jsx-child-element-spacing': ['warn'],
13
+
14
+ /**
15
+ * Обеспечить размещение закрывающей скобки в JSX
16
+ * https://eslint.style/rules/default/jsx-closing-bracket-location
17
+ */
18
+ '@stylistic/jsx-closing-bracket-location': ['warn', 'tag-aligned'],
19
+
20
+ /**
21
+ * Обеспечить расположение закрывающего тега для многострочного JSX
22
+ * https://eslint.style/rules/default/jsx-closing-tag-location
23
+ */
24
+ '@stylistic/jsx-closing-tag-location': ['warn', 'tag-aligned'],
25
+
26
+ /**
27
+ * Запрещает ненужные выражения JSX, когда достаточно одних литералов, или применяет выражения JSX к литералам в дочерних элементах JSX или атрибутах
28
+ * https://eslint.style/rules/default/jsx-curly-brace-presence
29
+ */
30
+ '@stylistic/jsx-curly-brace-presence': ['warn', { props: 'never', children: 'never', propElementValues: 'always' }],
31
+
32
+ /**
33
+ * Обеспечить единообразие переносов строк в фигурных скобках в атрибутах и выражениях JSX
34
+ * https://eslint.style/rules/default/jsx-curly-newline
35
+ */
36
+ '@stylistic/jsx-curly-newline': ['warn', { multiline: 'consistent', singleline: 'consistent' }],
37
+
38
+ /**
39
+ * Принудительное или запретительное использование пробелов внутри фигурных скобок в атрибутах и выражениях JSX
40
+ * https://eslint.style/rules/default/jsx-curly-spacing
41
+ */
42
+ '@stylistic/jsx-curly-spacing': ['warn', { when: 'always', attributes: { allowMultiline: false }, children: true }],
43
+
44
+ /**
45
+ * Принудительное или запретительное использование пробелов вокруг знаков равенства в атрибутах JSX
46
+ * https://eslint.style/rules/default/jsx-equals-spacing
47
+ */
48
+ '@stylistic/jsx-equals-spacing': ['warn', 'always'],
49
+
50
+ /**
51
+ * Обеспечить правильное положение первого свойства в JSX
52
+ * https://eslint.style/rules/default/jsx-first-prop-new-line
53
+ */
54
+ '@stylistic/jsx-first-prop-new-line': ['warn', 'multiline'],
55
+
56
+ /**
57
+ * Принудительно вставляйте переносы строк до и после элементов JSX, когда они используются в качестве аргументов функции.
58
+ * https://eslint.style/rules/default/jsx-function-call-newline
59
+ */
60
+ '@stylistic/jsx-function-call-newline': ['warn', 'multiline'],
61
+
62
+ /**
63
+ * Принудительно применять отступ JSX. Устарело, вместо этого используйте правило `indent`.
64
+ * https://eslint.style/rules/default/jsx-indent
65
+ */
66
+ '@stylistic/jsx-indent': ['warn', 'tab', { checkAttributes: true, indentLogicalExpressions: true }],
67
+
68
+ /**
69
+ * Обеспечить отступы свойств в JSX
70
+ * https://eslint.style/rules/default/jsx-indent-props
71
+ */
72
+ '@stylistic/jsx-indent-props': ['warn', 'tab'],
73
+
74
+ /**
75
+ * Обеспечить максимальное количество реквизитов в одной строке в JSX
76
+ * https://eslint.style/rules/default/jsx-max-props-per-line
77
+ */
78
+ '@stylistic/jsx-max-props-per-line': ['warn', { maximum: { single: 3, multi: 1 } }],
79
+
80
+ /**
81
+ * Требовать или запрещать новую строку после элементов и выражений jsx.
82
+ * https://eslint.style/rules/default/jsx-newline
83
+ */
84
+ '@stylistic/jsx-newline': ['warn', { prevent: false }],
85
+
86
+ /**
87
+ * Требуется один элемент JSX на строку
88
+ * https://eslint.style/rules/default/jsx-one-expression-per-line
89
+ */
90
+ '@stylistic/jsx-one-expression-per-line': ['warn'],
91
+
92
+ /**
93
+ * Применять PascalCase для определяемых пользователем компонентов JSX
94
+ * https://eslint.style/rules/default/jsx-pascal-case
95
+ */
96
+ '@stylistic/jsx-pascal-case': [
97
+ 'warn',
98
+ {
99
+ allowAllCaps: false,
100
+ allowNamespace: true,
101
+ allowLeadingUnderscore: false,
102
+ ignore: [],
103
+ },
104
+ ],
105
+
106
+ /**
107
+ * Запретить множественные пробелы между встроенными свойствами JSX
108
+ * https://eslint.style/rules/default/jsx-props-no-multi-spaces
109
+ */
110
+ '@stylistic/jsx-props-no-multi-spaces': ['warn'],
111
+
112
+ /**
113
+ * Обеспечить последовательное использование двойных или одинарных кавычек в атрибутах JSX
114
+ * https://eslint.style/rules/default/jsx-quotes
115
+ */
116
+ '@stylistic/jsx-quotes': ['warn', 'prefer-double'],
117
+
118
+ /**
119
+ * Запретить дополнительные закрывающие теги для компонентов без дочерних элементов
120
+ * https://eslint.style/rules/default/jsx-self-closing-comp
121
+ */
122
+ '@stylistic/jsx-self-closing-comp': ['warn', { component: true, html: true }],
123
+
124
+ /**
125
+ * Обеспечить сортировку реквизитов в алфавитном порядке
126
+ * https://eslint.style/rules/default/jsx-sort-props
127
+ */
128
+ '@stylistic/jsx-sort-props': [
129
+ 'warn',
130
+ {
131
+ callbacksLast: true,
132
+ shorthandFirst: true,
133
+ shorthandLast: true,
134
+ multiline: 'first',
135
+ ignoreCase: true,
136
+ noSortAlphabetically: true,
137
+ reservedFirst: true,
138
+ locale: 'auto',
139
+ },
140
+ ],
141
+
142
+ /**
143
+ * Обеспечить наличие пробелов внутри и вокруг открывающих и закрывающих скобок JSX
144
+ * https://eslint.style/rules/default/jsx-tag-spacing
145
+ */
146
+ '@stylistic/jsx-tag-spacing': [
147
+ 'warn',
148
+ {
149
+ closingSlash: 'never',
150
+ beforeSelfClosing: 'always',
151
+ afterOpening: 'never',
152
+ beforeClosing: 'never',
153
+ },
154
+ ],
155
+
156
+ /**
157
+ * Запретить отсутствующие скобки вокруг многострочного JSX
158
+ * https://eslint.style/rules/default/jsx-wrap-multilines
159
+ */
160
+ '@stylistic/jsx-wrap-multilines': [
161
+ 'warn',
162
+ {
163
+ declaration: 'parens-new-line',
164
+ assignment: 'parens-new-line',
165
+ return: 'parens-new-line',
166
+ arrow: 'parens-new-line',
167
+ condition: 'parens-new-line',
168
+ logical: 'parens-new-line',
169
+ prop: 'parens-new-line',
170
+ },
171
+ ],
172
+ },
173
+ };
@@ -0,0 +1,547 @@
1
+ import stylisticJs from '@stylistic/eslint-plugin';
2
+
3
+ /** @type {import('eslint').Linter.Config} */
4
+ export default {
5
+ plugins: { '@stylistic': stylisticJs },
6
+ rules: {
7
+
8
+ /**
9
+ * Принудительно вводить переносы строк после открытия и перед закрытием скобок массива
10
+ * https://eslint.style/rules/default/array-bracket-newline
11
+ */
12
+ '@stylistic/array-bracket-newline': ['warn', { multiline: true, minItems: 4 }],
13
+
14
+ /**
15
+ * Обеспечить единообразие интервалов внутри скобок массива
16
+ * https://eslint.style/rules/default/array-bracket-spacing
17
+ */
18
+ '@stylistic/array-bracket-spacing': ['warn', 'never'],
19
+
20
+ /**
21
+ * Принудительно вставлять переносы строк после каждого элемента массива
22
+ * https://eslint.style/rules/default/array-element-newline
23
+ */
24
+ '@stylistic/array-element-newline': ['warn', { consistent: true, multiline: true, minItems: 4 }],
25
+
26
+ /**
27
+ * Требуйте заключения аргументов стрелочной функции в скобки
28
+ * https://eslint.style/rules/default/arrow-parens
29
+ */
30
+ '@stylistic/arrow-parens': ['off'],
31
+
32
+ /**
33
+ * Обеспечить одинаковый интервал до и после стрелки в стрелочных функциях
34
+ * https://eslint.style/rules/default/arrow-spacing
35
+ */
36
+ '@stylistic/arrow-spacing': ['warn', { before: true, after: true }],
37
+
38
+ /**
39
+ * Запрещать или принудительно вводить пробелы внутри блоков после открытия блока и перед закрытием блока
40
+ * https://eslint.style/rules/default/block-spacing
41
+ */
42
+ '@stylistic/block-spacing': ['warn', 'always'],
43
+
44
+ /**
45
+ * Обеспечить единообразный стиль крепления блоков
46
+ * https://eslint.style/rules/default/brace-style
47
+ */
48
+ '@stylistic/brace-style': ['warn', '1tbs', { allowSingleLine: true }],
49
+
50
+ /**
51
+ * Требовать или запрещать конечные запятые
52
+ * https://eslint.style/rules/default/comma-dangle
53
+ */
54
+ '@stylistic/comma-dangle': [
55
+ 'warn',
56
+ {
57
+ arrays: 'always-multiline',
58
+ objects: 'always-multiline',
59
+ imports: 'never',
60
+ exports: 'never',
61
+ functions: 'never',
62
+ importAttributes: 'never',
63
+ dynamicImports: 'never',
64
+ },
65
+ ],
66
+
67
+ /**
68
+ * Обеспечьте одинаковый интервал до и после запятых
69
+ * https://eslint.style/rules/default/comma-spacing
70
+ */
71
+ '@stylistic/comma-spacing': ['warn', { before: false, after: true }],
72
+
73
+ /**
74
+ * Обеспечить единообразие стиля запятых
75
+ * https://eslint.style/rules/default/comma-style
76
+ */
77
+ '@stylistic/comma-style': ['warn', 'last'],
78
+
79
+ /**
80
+ * Обеспечить постоянный интервал внутри вычисляемых скобок свойств
81
+ * https://eslint.style/rules/default/computed-property-spacing
82
+ */
83
+ '@stylistic/computed-property-spacing': ['warn', 'never'],
84
+
85
+ /**
86
+ * Обеспечивать единообразие переносов строк после открывающихся и перед закрывающимися фигурными скобками
87
+ * https://eslint.style/rules/default/curly-newline
88
+ */
89
+ '@stylistic/curly-newline': ['warn', 'always'],
90
+
91
+ /**
92
+ * Обеспечивать единообразие переносов строк до и после точек
93
+ * https://eslint.style/rules/default/dot-location
94
+ */
95
+ '@stylistic/dot-location': ['warn', 'property'],
96
+
97
+ /**
98
+ * Требовать или запрещать новую строку в конце файлов
99
+ * https://eslint.style/rules/default/eol-last
100
+ */
101
+ '@stylistic/eol-last': ['warn', 'always'],
102
+
103
+ /**
104
+ * Требовать или запрещать пробелы между идентификаторами функций и их вызовами
105
+ * https://eslint.style/rules/default/func-call-spacing
106
+ */
107
+ '@stylistic/function-call-spacing': ['warn', 'never'],
108
+
109
+ /**
110
+ * Обеспечить переносы строк между аргументами вызова функции
111
+ * https://eslint.style/rules/default/function-call-argument-newline
112
+ */
113
+ '@stylistic/function-call-argument-newline': ['warn', 'consistent'],
114
+
115
+ /**
116
+ * Обеспечить последовательные переносы строк внутри скобок функций
117
+ * https://eslint.style/rules/default/function-paren-newline
118
+ */
119
+ '@stylistic/function-paren-newline': ['warn', 'consistent'],
120
+
121
+ /**
122
+ * Обеспечить единообразие интервалов вокруг операторов `*` в функциях генератора
123
+ * https://eslint.style/rules/default/generator-star-spacing
124
+ */
125
+ '@stylistic/generator-star-spacing': ['warn', { before: true, after: false }],
126
+
127
+ /**
128
+ * Обеспечить расположение тел стрелочных функций
129
+ * https://eslint.style/rules/default/implicit-arrow-linebreak
130
+ */
131
+ '@stylistic/implicit-arrow-linebreak': ['off'],
132
+
133
+ /**
134
+ * Обеспечить единообразие отступов
135
+ * https://eslint.style/rules/default/indent
136
+ */
137
+ '@stylistic/indent': ['warn', 'tab', { SwitchCase: 1 }],
138
+
139
+ /**
140
+ * Отступы для бинарных операторов
141
+ * https://eslint.style/rules/default/indent-binary-ops
142
+ */
143
+ '@stylistic/indent-binary-ops': ['warn', 'tab'],
144
+
145
+ /**
146
+ * Обеспечьте соблюдение единообразных интервалов между именами свойств и аннотациями типов в типах и интерфейсах.
147
+ * https://eslint.style/rules/default/key-spacing
148
+ */
149
+ '@stylistic/key-spacing': ['warn', { beforeColon: false }],
150
+
151
+ /**
152
+ * Обеспечьте одинаковый интервал до и после ключевых слов.
153
+ * https://eslint.style/rules/default/keyword-spacing
154
+ */
155
+ '@stylistic/keyword-spacing': ['warn', { before: true }],
156
+
157
+ /**
158
+ * Обеспечить положение строчных комментариев
159
+ * https://eslint.style/rules/default/line-comment-position
160
+ */
161
+ '@stylistic/line-comment-position': ['off'],
162
+
163
+ /**
164
+ * Обеспечить единообразие стиля переноса строк
165
+ * https://eslint.style/rules/default/linebreak-style
166
+ */
167
+ '@stylistic/linebreak-style': ['warn', 'unix'],
168
+
169
+ /**
170
+ * Требовать пустые строки вокруг комментариев
171
+ * https://eslint.style/rules/default/lines-around-comment
172
+ */
173
+ '@stylistic/lines-around-comment': [
174
+ 'warn',
175
+ {
176
+ allowBlockStart: true,
177
+ allowObjectStart: true,
178
+ beforeLineComment: true,
179
+ afterLineComment: false,
180
+ },
181
+ ],
182
+
183
+ /**
184
+ * Требовать или запрещать пустую строку между членами класса
185
+ * https://eslint.style/rules/default/lines-between-class-members
186
+ */
187
+ '@stylistic/lines-between-class-members': ['warn', 'always', { exceptAfterSingleLine: true }],
188
+
189
+ /**
190
+ * Обеспечить максимальную длину строки
191
+ * https://eslint.style/rules/default/max-len
192
+ */
193
+ '@stylistic/max-len': ['off'],
194
+
195
+ /**
196
+ * Обеспечить максимально допустимое количество утверждений в строке
197
+ * https://eslint.style/rules/default/max-statements-per-line
198
+ */
199
+ '@stylistic/max-statements-per-line': ['warn', { max: 1 }],
200
+
201
+ /**
202
+ * Требовать определенный стиль разделителя элементов для интерфейсов и литералов типов
203
+ * https://eslint.style/rules/default/member-delimiter-style
204
+ */
205
+ '@stylistic/member-delimiter-style': [
206
+ 'warn',
207
+ {
208
+ multiline: {
209
+ delimiter: 'semi',
210
+ requireLast: true,
211
+ },
212
+ singleline: {
213
+ delimiter: 'semi',
214
+ requireLast: false,
215
+ },
216
+
217
+ overrides: {
218
+ interface: {
219
+ multiline: {
220
+ delimiter: 'semi',
221
+ requireLast: true,
222
+ },
223
+ },
224
+ },
225
+ },
226
+ ],
227
+
228
+ /**
229
+ * Применить определенный стиль для многострочных комментариев
230
+ * https://eslint.style/rules/default/multiline-comment-style
231
+ */
232
+ '@stylistic/multiline-comment-style': ['warn', 'separate-lines'],
233
+
234
+ /**
235
+ * Обеспечить наличие новых строк между операндами троичных выражений
236
+ * https://eslint.style/rules/default/multiline-ternary
237
+ */
238
+ '@stylistic/multiline-ternary': ['warn', 'always-multiline'],
239
+
240
+ /**
241
+ * Включить или отключить скобки при вызове конструктора без аргументов
242
+ * https://eslint.style/rules/default/new-parens
243
+ */
244
+ '@stylistic/new-parens': ['warn', 'always'],
245
+
246
+ /**
247
+ * Требовать новую строку после каждого вызова в цепочке методов
248
+ * https://eslint.style/rules/default/newline-per-chained-call
249
+ */
250
+ '@stylistic/newline-per-chained-call': ['warn', { ignoreChainWithDepth: 4 }],
251
+
252
+ /**
253
+ * Запретить стрелочные функции там, где их можно спутать со сравнениями
254
+ * https://eslint.style/rules/default/no-confusing-arrow
255
+ */
256
+ '@stylistic/no-confusing-arrow': ['warn'],
257
+
258
+ /**
259
+ * Запретить ненужные скобки
260
+ * https://eslint.style/rules/default/no-extra-parens
261
+ */
262
+ '@stylistic/no-extra-parens': [
263
+ 'warn',
264
+ 'all',
265
+ {
266
+ returnAssign: false,
267
+ nestedBinaryExpressions: false,
268
+ ternaryOperandBinaryExpressions: false,
269
+ enforceForArrowConditionals: false,
270
+ },
271
+ ],
272
+
273
+ /**
274
+ * Запретить ненужные точки с запятой
275
+ * https://eslint.style/rules/default/no-extra-semi
276
+ */
277
+ '@stylistic/no-extra-semi': ['warn'],
278
+
279
+ /**
280
+ * Запретить начальные и конечные десятичные точки в числовых литералах
281
+ * https://eslint.style/rules/default/no-floating-decimal
282
+ */
283
+ '@stylistic/no-floating-decimal': ['warn'],
284
+
285
+ /**
286
+ * Запретить смешанные бинарные операторы
287
+ * https://eslint.style/rules/default/no-mixed-operators
288
+ */
289
+ '@stylistic/no-mixed-operators': ['error'],
290
+
291
+ /**
292
+ * Запретить смешанные пробелы и табуляции для отступов
293
+ * https://eslint.style/rules/default/no-mixed-spaces-and-tabs
294
+ */
295
+ '@stylistic/no-mixed-spaces-and-tabs': ['warn', 'smart-tabs'],
296
+
297
+ /**
298
+ * Запретить множественные пробелы
299
+ * https://eslint.style/rules/default/no-multi-spaces
300
+ */
301
+ '@stylistic/no-multi-spaces': ['warn', { ignoreEOLComments: true }],
302
+
303
+ /**
304
+ * Запретить несколько пустых строк
305
+ * https://eslint.style/rules/default/no-multiple-empty-lines
306
+ */
307
+ '@stylistic/no-multiple-empty-lines': ['warn', { max: 1, maxBOF: 0, maxEOF: 0 }],
308
+
309
+ /**
310
+ * Запретить табуляцию
311
+ * https://eslint.style/rules/default/no-tabs
312
+ */
313
+ '@stylistic/no-tabs': ['off', { allowIndentationTabs: true }],
314
+
315
+ /**
316
+ * Запретить пробелы в конце строк
317
+ * https://eslint.style/rules/default/no-trailing-spaces
318
+ */
319
+ '@stylistic/no-trailing-spaces': ['warn'],
320
+
321
+ /**
322
+ * Запретить пробелы перед свойствами
323
+ * https://eslint.style/rules/default/no-whitespace-before-property
324
+ */
325
+ '@stylistic/no-whitespace-before-property': ['warn'],
326
+
327
+ /**
328
+ * Обеспечить размещение однострочных операторов
329
+ * https://eslint.style/rules/default/nonblock-statement-body-position
330
+ */
331
+ '@stylistic/nonblock-statement-body-position': ['warn', 'beside'],
332
+
333
+ /**
334
+ * Обеспечивать единообразие переносов строк после открывающихся и перед закрывающимися фигурными скобками
335
+ * https://eslint.style/rules/default/object-curly-newline
336
+ */
337
+ '@stylistic/object-curly-newline': [
338
+ 'warn',
339
+ {
340
+ ObjectExpression: { multiline: true, minProperties: 4, consistent: true },
341
+ ObjectPattern: { multiline: true, minProperties: 4, consistent: true },
342
+ ImportDeclaration: { multiline: true, minProperties: 4 },
343
+ ExportDeclaration: { multiline: true, minProperties: 4 },
344
+ },
345
+ ],
346
+
347
+ /**
348
+ * Обеспечьте постоянный интервал внутри скобок
349
+ * https://eslint.style/rules/default/object-curly-spacing
350
+ */
351
+ '@stylistic/object-curly-spacing': ['warn', 'always'],
352
+
353
+ /**
354
+ * Обеспечить размещение свойств объекта на отдельных строках
355
+ * https://eslint.style/rules/default/object-property-newline
356
+ */
357
+ '@stylistic/object-property-newline': ['warn', { allowAllPropertiesOnSameLine: true }],
358
+
359
+ /**
360
+ * Требовать или запрещать переносы строк вокруг объявлений переменных
361
+ * https://eslint.style/rules/default/one-var-declaration-per-line
362
+ */
363
+ '@stylistic/one-var-declaration-per-line': ['warn', 'initializations'],
364
+
365
+ /**
366
+ * Обеспечить единый стиль переноса строк для операторов
367
+ * https://eslint.style/rules/default/operator-linebreak
368
+ */
369
+ '@stylistic/operator-linebreak': ['warn', 'before'],
370
+
371
+ /**
372
+ * Требовать или запрещать отступы внутри блоков
373
+ * https://eslint.style/rules/default/padded-blocks
374
+ */
375
+ '@stylistic/padded-blocks': ['off'],
376
+
377
+ /**
378
+ * Требовать или запрещать заполнение строк между операторами
379
+ * https://eslint.style/rules/default/padding-line-between-statements
380
+ */
381
+ '@stylistic/padding-line-between-statements': [
382
+ 'warn',
383
+ { blankLine: 'always', prev: '*', next: ['*'] },
384
+ { blankLine: 'any', prev: ['const', 'let', 'var'], next: ['const', 'let', 'var'] },
385
+ { blankLine: 'any', prev: ['block'], next: ['block'] },
386
+ { blankLine: 'any', prev: ['block-like'], next: ['block-like'] },
387
+ { blankLine: 'any', prev: ['cjs-export'], next: ['cjs-export'] },
388
+ { blankLine: 'any', prev: ['cjs-import'], next: ['cjs-import'] },
389
+ { blankLine: 'any', prev: ['class'], next: ['class'] },
390
+ { blankLine: 'any', prev: ['continue'], next: ['continue'] },
391
+ { blankLine: 'any', prev: ['debugger'], next: ['debugger'] },
392
+ { blankLine: 'any', prev: ['default'], next: ['default'] },
393
+ { blankLine: 'any', prev: ['directive'], next: ['directive'] },
394
+ { blankLine: 'any', prev: ['do'], next: ['do'] },
395
+ { blankLine: 'any', prev: ['empty'], next: ['empty'] },
396
+ { blankLine: 'any', prev: ['export'], next: ['export'] },
397
+ { blankLine: 'any', prev: ['expression'], next: ['expression'] },
398
+ { blankLine: 'any', prev: ['for'], next: ['for'] },
399
+ { blankLine: 'any', prev: ['function'], next: ['function'] },
400
+ { blankLine: 'any', prev: ['if'], next: ['if'] },
401
+ { blankLine: 'any', prev: ['iife'], next: ['iife'] },
402
+ { blankLine: 'any', prev: ['import'], next: ['import'] },
403
+ { blankLine: 'any', prev: ['multiline-block-like'], next: ['multiline-block-like'] },
404
+ {
405
+ blankLine: 'any',
406
+ prev: ['multiline-const', 'multiline-let', 'multiline-var'],
407
+ next: ['multiline-const', 'multiline-let', 'multiline-var'],
408
+ },
409
+ { blankLine: 'any', prev: ['multiline-export'], next: ['multiline-export'] },
410
+ { blankLine: 'any', prev: ['multiline-expression'], next: ['multiline-expression'] },
411
+ { blankLine: 'any', prev: ['return'], next: ['return'] },
412
+ {
413
+ blankLine: 'any',
414
+ prev: ['singleline-const', 'singleline-let', 'singleline-var'],
415
+ next: ['singleline-const', 'singleline-let', 'singleline-var'],
416
+ },
417
+ { blankLine: 'any', prev: ['singleline-export'], next: ['singleline-export'] },
418
+ { blankLine: 'any', prev: ['switch'], next: ['switch'] },
419
+ { blankLine: 'any', prev: ['throw'], next: ['throw'] },
420
+ { blankLine: 'any', prev: ['try'], next: ['try'] },
421
+ { blankLine: 'any', prev: ['while'], next: ['while'] },
422
+ { blankLine: 'any', prev: ['with'], next: ['with'] },
423
+ { blankLine: 'any', prev: ['type'], next: ['type'] },
424
+ { blankLine: 'any', prev: ['interface'], next: ['interface'] },
425
+ ],
426
+
427
+ /**
428
+ * Обязательно заключайте в кавычки имена свойств объектов, типов, интерфейсов и перечислений.
429
+ * https://eslint.style/rules/default/quote-props
430
+ */
431
+ '@stylistic/quote-props': ['warn', 'as-needed', { keywords: false, numbers: true }],
432
+
433
+ /**
434
+ * Обеспечить последовательное использование обратных кавычек, двойных или одинарных кавычек
435
+ * https://eslint.style/rules/default/quotes
436
+ */
437
+ '@stylistic/quotes': ['warn', 'single'],
438
+
439
+ /**
440
+ * Обеспечить соблюдение интервалов между операторами rest и spread и их выражениями
441
+ * https://eslint.style/rules/default/rest-spread-spacing
442
+ */
443
+ '@stylistic/rest-spread-spacing': ['warn', 'never'],
444
+
445
+ /**
446
+ * Требовать или запрещать точки с запятой вместо ASI
447
+ * https://eslint.style/rules/default/semi
448
+ */
449
+ '@stylistic/semi': ['warn', 'always'],
450
+
451
+ /**
452
+ * Обеспечьте одинаковый интервал до и после точек с запятой
453
+ * https://eslint.style/rules/default/semi-spacing
454
+ */
455
+ '@stylistic/semi-spacing': ['warn', { before: false, after: true }],
456
+
457
+ /**
458
+ * Обеспечить правильное расположение точек с запятой
459
+ * https://eslint.style/rules/default/semi-style
460
+ */
461
+ '@stylistic/semi-style': ['warn', 'last'],
462
+
463
+ /**
464
+ * Обеспечьте одинаковый интервал перед блоками
465
+ * https://eslint.style/rules/default/space-before-blocks
466
+ */
467
+ '@stylistic/space-before-blocks': ['warn', 'always'],
468
+
469
+ /**
470
+ * Обеспечить одинаковый интервал перед скобками функций
471
+ * https://eslint.style/rules/default/space-before-function-paren
472
+ */
473
+ '@stylistic/space-before-function-paren': ['warn', 'always'],
474
+
475
+ /**
476
+ * Обеспечьте одинаковый интервал внутри скобок
477
+ * https://eslint.style/rules/default/space-in-parens
478
+ */
479
+ '@stylistic/space-in-parens': ['warn', 'never'],
480
+
481
+ /**
482
+ * Требуйте пробелов вокруг инфиксных операторов
483
+ * https://eslint.style/rules/default/space-infix-ops
484
+ */
485
+ '@stylistic/space-infix-ops': ['warn'],
486
+
487
+ /**
488
+ * Обеспечивать единообразие интервалов до и после унарных операторов
489
+ * https://eslint.style/rules/default/space-unary-ops
490
+ */
491
+ '@stylistic/space-unary-ops': ['warn'],
492
+
493
+ /**
494
+ * Обеспечьте единообразие интервалов после `//` или `/*` в комментариях
495
+ * https://eslint.style/rules/default/spaced-comment
496
+ */
497
+ '@stylistic/spaced-comment': ['warn', 'always'],
498
+
499
+ /**
500
+ * Обеспечить наличие пробелов вокруг двоеточий в операторах switch
501
+ * https://eslint.style/rules/default/switch-colon-spacing
502
+ */
503
+ '@stylistic/switch-colon-spacing': ['warn', { after: true, before: false }],
504
+
505
+ /**
506
+ * Требовать или запрещать пробелы вокруг встроенных выражений строк шаблонов
507
+ * https://eslint.style/rules/default/template-curly-spacing
508
+ */
509
+ '@stylistic/template-curly-spacing': ['warn', 'never'],
510
+
511
+ /**
512
+ * Требовать или запрещать пробелы между тегами шаблонов и их литералами
513
+ * https://eslint.style/rules/default/template-tag-spacing
514
+ */
515
+ '@stylistic/template-tag-spacing': ['warn', 'never'],
516
+
517
+ /**
518
+ * Требуйте одинакового интервала вокруг аннотаций типов.
519
+ * https://eslint.style/rules/default/type-annotation-spacing
520
+ */
521
+ '@stylistic/type-annotation-spacing': ['warn'],
522
+
523
+ /**
524
+ * Обеспечивает единообразие интервалов внутри обобщенных типов TypeScript
525
+ * https://eslint.style/rules/default/type-generic-spacing
526
+ */
527
+ '@stylistic/type-generic-spacing': ['warn'],
528
+
529
+ /**
530
+ * Ожидайте пробел перед объявлением типа в именованном кортеже
531
+ * https://eslint.style/rules/default/type-named-tuple-spacing
532
+ */
533
+ '@stylistic/type-named-tuple-spacing': ['warn'],
534
+
535
+ /**
536
+ * Требуйте заключения в скобки непосредственных вызовов `function`
537
+ * https://eslint.style/rules/default/wrap-iife
538
+ */
539
+ '@stylistic/wrap-iife': ['warn', 'inside'],
540
+
541
+ /**
542
+ * Требуйте заключения в скобки литералов регулярных выражений
543
+ * https://eslint.style/rules/default/wrap-regex
544
+ */
545
+ '@stylistic/wrap-regex': ['warn'],
546
+ },
547
+ };
package/package.json CHANGED
@@ -1,12 +1,8 @@
1
1
  {
2
2
  "name": "@flarian/frontend-preset",
3
- "version": "1.0.2",
4
- "author": "FlarianWeb",
3
+ "version": "1.1.0",
5
4
  "license": "MIT",
6
- "publishConfig": {
7
- "access": "public",
8
- "registry": "https://registry.npmjs.org/"
9
- },
5
+ "author": "FlarianWeb",
10
6
  "description": "Frontend preset with ESLint 9 flat config, Prettier and Stylelint",
11
7
  "keywords": [
12
8
  "eslint",
@@ -17,33 +13,51 @@
17
13
  "preset",
18
14
  "linting"
19
15
  ],
16
+ "publishConfig": {
17
+ "access": "public",
18
+ "registry": "https://registry.npmjs.org/"
19
+ },
20
20
  "type": "module",
21
21
  "files": [
22
22
  "eslint",
23
23
  "prettier",
24
24
  "stylelint"
25
25
  ],
26
- "engines": {
27
- "node": ">=22.5.0"
28
- },
29
26
  "scripts": {},
30
- "peerDependencies": {
31
- "eslint": "^9.0.0",
32
- "eslint-config-prettier": "^9.0.0",
33
- "eslint-plugin-prettier": "^5.0.0",
34
- "eslint-plugin-vue": "^9.0.0",
35
- "prettier": "^3.0.0",
36
- "stylelint": "^16.0.0",
37
- "stylelint-config-standard": "^36.0.0"
38
- },
39
- "packageManager": "pnpm@10.6.1",
40
27
  "devDependencies": {
28
+ "@eslint/js": "9.34.0",
41
29
  "@semantic-release/changelog": "6.0.3",
42
30
  "@semantic-release/git": "10.0.1",
43
31
  "@semantic-release/github": "11.0.5",
44
32
  "@semantic-release/npm": "12.0.2",
33
+ "@stylistic/eslint-plugin": "5.2.3",
45
34
  "conventional-changelog-conventionalcommits": "9.1.0",
35
+ "eslint": "9.34.0",
36
+ "eslint-config-prettier": "10.1.8",
37
+ "eslint-plugin-jsonc": "2.20.1",
38
+ "eslint-plugin-prettier": "5.5.4",
39
+ "eslint-plugin-simple-import-sort": "12.1.1",
40
+ "eslint-plugin-vue": "10.4.0",
46
41
  "prettier": "3.6.2",
47
- "semantic-release": "24.2.7"
42
+ "semantic-release": "24.2.7",
43
+ "stylelint": "16.23.1",
44
+ "stylelint-config-standard": "39.0.0"
45
+ },
46
+ "engines": {
47
+ "node": ">=22.5.0"
48
+ },
49
+ "packageManager": "pnpm@10.6.1",
50
+ "peerDependencies": {
51
+ "@eslint/js": "9.34.0",
52
+ "@stylistic/eslint-plugin": "5.2.3",
53
+ "eslint": "9.34.0",
54
+ "eslint-config-prettier": "10.1.8",
55
+ "eslint-plugin-jsonc": "2.20.1",
56
+ "eslint-plugin-prettier": "5.5.4",
57
+ "eslint-plugin-simple-import-sort": "12.1.1",
58
+ "eslint-plugin-vue": "10.4.0",
59
+ "prettier": "^3.0.0",
60
+ "stylelint": "16.23.1",
61
+ "stylelint-config-standard": "39.0.0"
48
62
  }
49
63
  }
@@ -10,4 +10,4 @@ export default {
10
10
  printWidth: 140,
11
11
  trailingComma: 'es5',
12
12
  arrowParens: 'avoid',
13
- };
13
+ };
@@ -1,3 +1,3 @@
1
1
  export default {
2
- extends: 'stylelint-config-standard'
3
- };
2
+ extends: 'stylelint-config-standard',
3
+ };