@rotki/eslint-plugin 1.1.0 → 1.3.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.
package/README.md CHANGED
@@ -24,11 +24,108 @@ npm install --save-dev @rotki/eslint-plugin
24
24
  yarn add -D @rotki/eslint-plugin
25
25
  ```
26
26
 
27
+ ## Usage
28
+
29
+ Use the recommended configuration in your ESLint flat config:
30
+
31
+ ```js
32
+ import rotkiPlugin from '@rotki/eslint-plugin';
33
+
34
+ export default [
35
+ rotkiPlugin.configs['recommended-flat'],
36
+ ];
37
+ ```
38
+
39
+ Or configure individual rules:
40
+
41
+ <!-- eslint-disable perfectionist/sort-imports -->
42
+
43
+ ```js
44
+ import * as jsoncParser from 'jsonc-eslint-parser';
45
+ import rotkiPlugin from '@rotki/eslint-plugin';
46
+
47
+ export default [
48
+ {
49
+ plugins: { '@rotki': rotkiPlugin },
50
+ },
51
+ {
52
+ files: ['**/src/locales/*.json'],
53
+ languageOptions: { parser: jsoncParser },
54
+ rules: {
55
+ '@rotki/no-unused-i18n-keys': ['error', {
56
+ src: 'src',
57
+ extensions: ['.ts', '.vue'],
58
+ ignoreKeys: ['backend_mappings.*'],
59
+ }],
60
+ },
61
+ },
62
+ ];
63
+ ```
64
+
65
+ <!-- eslint-enable perfectionist/sort-imports -->
66
+
67
+ ## Rules
68
+
69
+ | Rule | Description | Fixable |
70
+ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------- | ----------- |
71
+ | [consistent-ref-type-annotation](https://rotki.github.io/eslint-plugin/rules/consistent-ref-type-annotation) | Ensures consistent type annotation position for ref, computed assignments | :black_nib: |
72
+ | [max-dependencies](https://rotki.github.io/eslint-plugin/rules/max-dependencies) | Enforce a maximum number of dependencies per file | |
73
+ | [no-deprecated-classes](https://rotki.github.io/eslint-plugin/rules/no-deprecated-classes) | Disallow deprecated vuetify css classes | :black_nib: |
74
+ | [no-deprecated-components](https://rotki.github.io/eslint-plugin/rules/no-deprecated-components) | Disallow deprecated components | :black_nib: |
75
+ | [no-deprecated-props](https://rotki.github.io/eslint-plugin/rules/no-deprecated-props) | Replace deprecated props with their replacements | :black_nib: |
76
+ | [no-dot-ts-imports](https://rotki.github.io/eslint-plugin/rules/no-dot-ts-imports) | Disallow .ts extension in import statements | :black_nib: |
77
+ | [no-legacy-library-import](https://rotki.github.io/eslint-plugin/rules/no-legacy-library-import) | Disallow imports from @rotki/ui-library-compat | :black_nib: |
78
+ | [no-unused-i18n-keys](https://rotki.github.io/eslint-plugin/rules/no-unused-i18n-keys) | Disallow unused i18n keys in locale files | :black_nib: |
79
+
27
80
  ## Documentation
28
81
 
29
- For detailed usage instructions, available rules, and configuration options,
82
+ For detailed rule options and configuration,
30
83
  please visit our [documentation](https://rotki.github.io/eslint-plugin).
31
84
 
85
+ <details>
86
+ <summary><h2>Testing Rules with Rotki</h2></summary>
87
+
88
+ To test rules against the real rotki codebase and benchmark performance:
89
+
90
+ ### Setup
91
+
92
+ 1. Build the plugin:
93
+
94
+ ```bash
95
+ pnpm run build
96
+ ```
97
+
98
+ 2. Install it in the rotki frontend via `file:` protocol:
99
+
100
+ ```bash
101
+ cd ../rotki/rotki/frontend
102
+ # Update package.json: "@rotki/eslint-plugin": "file:../../eslint-plugin"
103
+ pnpm install --no-frozen-lockfile
104
+ ```
105
+
106
+ ### Benchmarking
107
+
108
+ Create minimal ESLint configs that isolate individual rules, then time them against all locale files:
109
+
110
+ ```bash
111
+ # Intlify rule
112
+ time npx eslint -c bench-intlify.config.js 'app/src/locales/*.json'
113
+
114
+ # Rotki rule
115
+ time npx eslint -c bench-rotki.config.js 'app/src/locales/*.json'
116
+ ```
117
+
118
+ ### Benchmark Results (rotki frontend, 7 locale files, ~1.1MB total)
119
+
120
+ | Rule | Average Time |
121
+ | ---------------------------------- | ------------ |
122
+ | `@intlify/vue-i18n/no-unused-keys` | ~71s |
123
+ | `@rotki/no-unused-i18n-keys` | ~5s |
124
+
125
+ The rotki rule is ~14x faster due to file-level caching, early bail-out on files without i18n calls, and avoiding the `vue-i18n` settings/localeDir resolution overhead.
126
+
127
+ </details>
128
+
32
129
  ## Contributing
33
130
 
34
131
  Contributions are welcome!
package/dist/index.d.mts CHANGED
@@ -4,6 +4,14 @@ interface PluginRuleModule<TOptions extends readonly unknown[] = []> extends Rul
4
4
  defaultOptions: TOptions;
5
5
  }
6
6
 
7
+ type Options$3 = [
8
+ {
9
+ extensions: string[];
10
+ ignoreKeys: string[];
11
+ src: string;
12
+ }
13
+ ];
14
+
7
15
  type Options$2 = [{
8
16
  legacy: boolean;
9
17
  }];
@@ -23,6 +31,13 @@ declare const plugin: {
23
31
  version: string;
24
32
  };
25
33
  rules: {
34
+ 'composable-input-flexibility': PluginRuleModule<[]>;
35
+ 'composable-naming-convention': PluginRuleModule<[]>;
36
+ 'composable-no-default-export': PluginRuleModule<[]>;
37
+ 'composable-prefer-shallowref': PluginRuleModule<[]>;
38
+ 'composable-require-cleanup': PluginRuleModule<[]>;
39
+ 'composable-return-readonly': PluginRuleModule<[]>;
40
+ 'composable-ssr-safety': PluginRuleModule<[]>;
26
41
  'consistent-ref-type-annotation': PluginRuleModule<Options>;
27
42
  'max-dependencies': PluginRuleModule<[Options$1]>;
28
43
  'no-deprecated-classes': PluginRuleModule<[]>;
@@ -30,6 +45,8 @@ declare const plugin: {
30
45
  'no-deprecated-props': PluginRuleModule<[]>;
31
46
  'no-dot-ts-imports': PluginRuleModule<[]>;
32
47
  'no-legacy-library-import': PluginRuleModule<[]>;
48
+ 'no-unused-i18n-keys': PluginRuleModule<Options$3>;
49
+ 'require-jsdoc-on-composable-options': PluginRuleModule<[]>;
33
50
  };
34
51
  };
35
52
 
@@ -39,6 +56,13 @@ declare const _default: {
39
56
  version: string;
40
57
  };
41
58
  rules: {
59
+ 'composable-input-flexibility': PluginRuleModule<[]>;
60
+ 'composable-naming-convention': PluginRuleModule<[]>;
61
+ 'composable-no-default-export': PluginRuleModule<[]>;
62
+ 'composable-prefer-shallowref': PluginRuleModule<[]>;
63
+ 'composable-require-cleanup': PluginRuleModule<[]>;
64
+ 'composable-return-readonly': PluginRuleModule<[]>;
65
+ 'composable-ssr-safety': PluginRuleModule<[]>;
42
66
  'consistent-ref-type-annotation': PluginRuleModule<Options>;
43
67
  'max-dependencies': PluginRuleModule<[Options$1]>;
44
68
  'no-deprecated-classes': PluginRuleModule<[]>;
@@ -46,6 +70,8 @@ declare const _default: {
46
70
  'no-deprecated-props': PluginRuleModule<[]>;
47
71
  'no-dot-ts-imports': PluginRuleModule<[]>;
48
72
  'no-legacy-library-import': PluginRuleModule<[]>;
73
+ 'no-unused-i18n-keys': PluginRuleModule<Options$3>;
74
+ 'require-jsdoc-on-composable-options': PluginRuleModule<[]>;
49
75
  };
50
76
  } & {
51
77
  configs: {
@@ -57,6 +83,13 @@ declare const _default: {
57
83
  version: string;
58
84
  };
59
85
  rules: {
86
+ 'composable-input-flexibility': PluginRuleModule<[]>;
87
+ 'composable-naming-convention': PluginRuleModule<[]>;
88
+ 'composable-no-default-export': PluginRuleModule<[]>;
89
+ 'composable-prefer-shallowref': PluginRuleModule<[]>;
90
+ 'composable-require-cleanup': PluginRuleModule<[]>;
91
+ 'composable-return-readonly': PluginRuleModule<[]>;
92
+ 'composable-ssr-safety': PluginRuleModule<[]>;
60
93
  'consistent-ref-type-annotation': PluginRuleModule<Options>;
61
94
  'max-dependencies': PluginRuleModule<[Options$1]>;
62
95
  'no-deprecated-classes': PluginRuleModule<[]>;
@@ -64,6 +97,8 @@ declare const _default: {
64
97
  'no-deprecated-props': PluginRuleModule<[]>;
65
98
  'no-dot-ts-imports': PluginRuleModule<[]>;
66
99
  'no-legacy-library-import': PluginRuleModule<[]>;
100
+ 'no-unused-i18n-keys': PluginRuleModule<Options$3>;
101
+ 'require-jsdoc-on-composable-options': PluginRuleModule<[]>;
67
102
  };
68
103
  };
69
104
  };
@@ -84,6 +119,157 @@ declare const _default: {
84
119
  version: string;
85
120
  };
86
121
  rules: {
122
+ 'composable-input-flexibility': PluginRuleModule<[]>;
123
+ 'composable-naming-convention': PluginRuleModule<[]>;
124
+ 'composable-no-default-export': PluginRuleModule<[]>;
125
+ 'composable-prefer-shallowref': PluginRuleModule<[]>;
126
+ 'composable-require-cleanup': PluginRuleModule<[]>;
127
+ 'composable-return-readonly': PluginRuleModule<[]>;
128
+ 'composable-ssr-safety': PluginRuleModule<[]>;
129
+ 'consistent-ref-type-annotation': PluginRuleModule<Options>;
130
+ 'max-dependencies': PluginRuleModule<[Options$1]>;
131
+ 'no-deprecated-classes': PluginRuleModule<[]>;
132
+ 'no-deprecated-components': PluginRuleModule<Options$2>;
133
+ 'no-deprecated-props': PluginRuleModule<[]>;
134
+ 'no-dot-ts-imports': PluginRuleModule<[]>;
135
+ 'no-legacy-library-import': PluginRuleModule<[]>;
136
+ 'no-unused-i18n-keys': PluginRuleModule<Options$3>;
137
+ 'require-jsdoc-on-composable-options': PluginRuleModule<[]>;
138
+ };
139
+ };
140
+ };
141
+ rules: {
142
+ [k: string]: number;
143
+ };
144
+ } | {
145
+ plugins: string[];
146
+ rules: {
147
+ [k: string]: number;
148
+ };
149
+ };
150
+ strict: {
151
+ plugins: {
152
+ [x: string]: {
153
+ meta: {
154
+ name: string;
155
+ version: string;
156
+ };
157
+ rules: {
158
+ 'composable-input-flexibility': PluginRuleModule<[]>;
159
+ 'composable-naming-convention': PluginRuleModule<[]>;
160
+ 'composable-no-default-export': PluginRuleModule<[]>;
161
+ 'composable-prefer-shallowref': PluginRuleModule<[]>;
162
+ 'composable-require-cleanup': PluginRuleModule<[]>;
163
+ 'composable-return-readonly': PluginRuleModule<[]>;
164
+ 'composable-ssr-safety': PluginRuleModule<[]>;
165
+ 'consistent-ref-type-annotation': PluginRuleModule<Options>;
166
+ 'max-dependencies': PluginRuleModule<[Options$1]>;
167
+ 'no-deprecated-classes': PluginRuleModule<[]>;
168
+ 'no-deprecated-components': PluginRuleModule<Options$2>;
169
+ 'no-deprecated-props': PluginRuleModule<[]>;
170
+ 'no-dot-ts-imports': PluginRuleModule<[]>;
171
+ 'no-legacy-library-import': PluginRuleModule<[]>;
172
+ 'no-unused-i18n-keys': PluginRuleModule<Options$3>;
173
+ 'require-jsdoc-on-composable-options': PluginRuleModule<[]>;
174
+ };
175
+ };
176
+ };
177
+ rules: {
178
+ [k: string]: number;
179
+ };
180
+ } | {
181
+ plugins: string[];
182
+ rules: {
183
+ [k: string]: number;
184
+ };
185
+ };
186
+ 'strict-flat': {
187
+ plugins: {
188
+ [x: string]: {
189
+ meta: {
190
+ name: string;
191
+ version: string;
192
+ };
193
+ rules: {
194
+ 'composable-input-flexibility': PluginRuleModule<[]>;
195
+ 'composable-naming-convention': PluginRuleModule<[]>;
196
+ 'composable-no-default-export': PluginRuleModule<[]>;
197
+ 'composable-prefer-shallowref': PluginRuleModule<[]>;
198
+ 'composable-require-cleanup': PluginRuleModule<[]>;
199
+ 'composable-return-readonly': PluginRuleModule<[]>;
200
+ 'composable-ssr-safety': PluginRuleModule<[]>;
201
+ 'consistent-ref-type-annotation': PluginRuleModule<Options>;
202
+ 'max-dependencies': PluginRuleModule<[Options$1]>;
203
+ 'no-deprecated-classes': PluginRuleModule<[]>;
204
+ 'no-deprecated-components': PluginRuleModule<Options$2>;
205
+ 'no-deprecated-props': PluginRuleModule<[]>;
206
+ 'no-dot-ts-imports': PluginRuleModule<[]>;
207
+ 'no-legacy-library-import': PluginRuleModule<[]>;
208
+ 'no-unused-i18n-keys': PluginRuleModule<Options$3>;
209
+ 'require-jsdoc-on-composable-options': PluginRuleModule<[]>;
210
+ };
211
+ };
212
+ };
213
+ rules: {
214
+ [k: string]: number;
215
+ };
216
+ } | {
217
+ plugins: string[];
218
+ rules: {
219
+ [k: string]: number;
220
+ };
221
+ };
222
+ stylistic: {
223
+ plugins: {
224
+ [x: string]: {
225
+ meta: {
226
+ name: string;
227
+ version: string;
228
+ };
229
+ rules: {
230
+ 'composable-input-flexibility': PluginRuleModule<[]>;
231
+ 'composable-naming-convention': PluginRuleModule<[]>;
232
+ 'composable-no-default-export': PluginRuleModule<[]>;
233
+ 'composable-prefer-shallowref': PluginRuleModule<[]>;
234
+ 'composable-require-cleanup': PluginRuleModule<[]>;
235
+ 'composable-return-readonly': PluginRuleModule<[]>;
236
+ 'composable-ssr-safety': PluginRuleModule<[]>;
237
+ 'consistent-ref-type-annotation': PluginRuleModule<Options>;
238
+ 'max-dependencies': PluginRuleModule<[Options$1]>;
239
+ 'no-deprecated-classes': PluginRuleModule<[]>;
240
+ 'no-deprecated-components': PluginRuleModule<Options$2>;
241
+ 'no-deprecated-props': PluginRuleModule<[]>;
242
+ 'no-dot-ts-imports': PluginRuleModule<[]>;
243
+ 'no-legacy-library-import': PluginRuleModule<[]>;
244
+ 'no-unused-i18n-keys': PluginRuleModule<Options$3>;
245
+ 'require-jsdoc-on-composable-options': PluginRuleModule<[]>;
246
+ };
247
+ };
248
+ };
249
+ rules: {
250
+ [k: string]: number;
251
+ };
252
+ } | {
253
+ plugins: string[];
254
+ rules: {
255
+ [k: string]: number;
256
+ };
257
+ };
258
+ 'stylistic-flat': {
259
+ plugins: {
260
+ [x: string]: {
261
+ meta: {
262
+ name: string;
263
+ version: string;
264
+ };
265
+ rules: {
266
+ 'composable-input-flexibility': PluginRuleModule<[]>;
267
+ 'composable-naming-convention': PluginRuleModule<[]>;
268
+ 'composable-no-default-export': PluginRuleModule<[]>;
269
+ 'composable-prefer-shallowref': PluginRuleModule<[]>;
270
+ 'composable-require-cleanup': PluginRuleModule<[]>;
271
+ 'composable-return-readonly': PluginRuleModule<[]>;
272
+ 'composable-ssr-safety': PluginRuleModule<[]>;
87
273
  'consistent-ref-type-annotation': PluginRuleModule<Options>;
88
274
  'max-dependencies': PluginRuleModule<[Options$1]>;
89
275
  'no-deprecated-classes': PluginRuleModule<[]>;
@@ -91,6 +277,8 @@ declare const _default: {
91
277
  'no-deprecated-props': PluginRuleModule<[]>;
92
278
  'no-dot-ts-imports': PluginRuleModule<[]>;
93
279
  'no-legacy-library-import': PluginRuleModule<[]>;
280
+ 'no-unused-i18n-keys': PluginRuleModule<Options$3>;
281
+ 'require-jsdoc-on-composable-options': PluginRuleModule<[]>;
94
282
  };
95
283
  };
96
284
  };
@@ -114,4 +302,5 @@ type Rules = {
114
302
  [K in keyof RuleOptions]: Linter.RuleEntry<RuleOptions[K]>;
115
303
  };
116
304
 
117
- export { type RuleOptions, type Rules, _default as default };
305
+ export { _default as default };
306
+ export type { RuleOptions, Rules };
package/dist/index.d.ts CHANGED
@@ -4,6 +4,14 @@ interface PluginRuleModule<TOptions extends readonly unknown[] = []> extends Rul
4
4
  defaultOptions: TOptions;
5
5
  }
6
6
 
7
+ type Options$3 = [
8
+ {
9
+ extensions: string[];
10
+ ignoreKeys: string[];
11
+ src: string;
12
+ }
13
+ ];
14
+
7
15
  type Options$2 = [{
8
16
  legacy: boolean;
9
17
  }];
@@ -23,6 +31,13 @@ declare const plugin: {
23
31
  version: string;
24
32
  };
25
33
  rules: {
34
+ 'composable-input-flexibility': PluginRuleModule<[]>;
35
+ 'composable-naming-convention': PluginRuleModule<[]>;
36
+ 'composable-no-default-export': PluginRuleModule<[]>;
37
+ 'composable-prefer-shallowref': PluginRuleModule<[]>;
38
+ 'composable-require-cleanup': PluginRuleModule<[]>;
39
+ 'composable-return-readonly': PluginRuleModule<[]>;
40
+ 'composable-ssr-safety': PluginRuleModule<[]>;
26
41
  'consistent-ref-type-annotation': PluginRuleModule<Options>;
27
42
  'max-dependencies': PluginRuleModule<[Options$1]>;
28
43
  'no-deprecated-classes': PluginRuleModule<[]>;
@@ -30,6 +45,8 @@ declare const plugin: {
30
45
  'no-deprecated-props': PluginRuleModule<[]>;
31
46
  'no-dot-ts-imports': PluginRuleModule<[]>;
32
47
  'no-legacy-library-import': PluginRuleModule<[]>;
48
+ 'no-unused-i18n-keys': PluginRuleModule<Options$3>;
49
+ 'require-jsdoc-on-composable-options': PluginRuleModule<[]>;
33
50
  };
34
51
  };
35
52
 
@@ -39,6 +56,13 @@ declare const _default: {
39
56
  version: string;
40
57
  };
41
58
  rules: {
59
+ 'composable-input-flexibility': PluginRuleModule<[]>;
60
+ 'composable-naming-convention': PluginRuleModule<[]>;
61
+ 'composable-no-default-export': PluginRuleModule<[]>;
62
+ 'composable-prefer-shallowref': PluginRuleModule<[]>;
63
+ 'composable-require-cleanup': PluginRuleModule<[]>;
64
+ 'composable-return-readonly': PluginRuleModule<[]>;
65
+ 'composable-ssr-safety': PluginRuleModule<[]>;
42
66
  'consistent-ref-type-annotation': PluginRuleModule<Options>;
43
67
  'max-dependencies': PluginRuleModule<[Options$1]>;
44
68
  'no-deprecated-classes': PluginRuleModule<[]>;
@@ -46,6 +70,8 @@ declare const _default: {
46
70
  'no-deprecated-props': PluginRuleModule<[]>;
47
71
  'no-dot-ts-imports': PluginRuleModule<[]>;
48
72
  'no-legacy-library-import': PluginRuleModule<[]>;
73
+ 'no-unused-i18n-keys': PluginRuleModule<Options$3>;
74
+ 'require-jsdoc-on-composable-options': PluginRuleModule<[]>;
49
75
  };
50
76
  } & {
51
77
  configs: {
@@ -57,6 +83,13 @@ declare const _default: {
57
83
  version: string;
58
84
  };
59
85
  rules: {
86
+ 'composable-input-flexibility': PluginRuleModule<[]>;
87
+ 'composable-naming-convention': PluginRuleModule<[]>;
88
+ 'composable-no-default-export': PluginRuleModule<[]>;
89
+ 'composable-prefer-shallowref': PluginRuleModule<[]>;
90
+ 'composable-require-cleanup': PluginRuleModule<[]>;
91
+ 'composable-return-readonly': PluginRuleModule<[]>;
92
+ 'composable-ssr-safety': PluginRuleModule<[]>;
60
93
  'consistent-ref-type-annotation': PluginRuleModule<Options>;
61
94
  'max-dependencies': PluginRuleModule<[Options$1]>;
62
95
  'no-deprecated-classes': PluginRuleModule<[]>;
@@ -64,6 +97,8 @@ declare const _default: {
64
97
  'no-deprecated-props': PluginRuleModule<[]>;
65
98
  'no-dot-ts-imports': PluginRuleModule<[]>;
66
99
  'no-legacy-library-import': PluginRuleModule<[]>;
100
+ 'no-unused-i18n-keys': PluginRuleModule<Options$3>;
101
+ 'require-jsdoc-on-composable-options': PluginRuleModule<[]>;
67
102
  };
68
103
  };
69
104
  };
@@ -84,6 +119,157 @@ declare const _default: {
84
119
  version: string;
85
120
  };
86
121
  rules: {
122
+ 'composable-input-flexibility': PluginRuleModule<[]>;
123
+ 'composable-naming-convention': PluginRuleModule<[]>;
124
+ 'composable-no-default-export': PluginRuleModule<[]>;
125
+ 'composable-prefer-shallowref': PluginRuleModule<[]>;
126
+ 'composable-require-cleanup': PluginRuleModule<[]>;
127
+ 'composable-return-readonly': PluginRuleModule<[]>;
128
+ 'composable-ssr-safety': PluginRuleModule<[]>;
129
+ 'consistent-ref-type-annotation': PluginRuleModule<Options>;
130
+ 'max-dependencies': PluginRuleModule<[Options$1]>;
131
+ 'no-deprecated-classes': PluginRuleModule<[]>;
132
+ 'no-deprecated-components': PluginRuleModule<Options$2>;
133
+ 'no-deprecated-props': PluginRuleModule<[]>;
134
+ 'no-dot-ts-imports': PluginRuleModule<[]>;
135
+ 'no-legacy-library-import': PluginRuleModule<[]>;
136
+ 'no-unused-i18n-keys': PluginRuleModule<Options$3>;
137
+ 'require-jsdoc-on-composable-options': PluginRuleModule<[]>;
138
+ };
139
+ };
140
+ };
141
+ rules: {
142
+ [k: string]: number;
143
+ };
144
+ } | {
145
+ plugins: string[];
146
+ rules: {
147
+ [k: string]: number;
148
+ };
149
+ };
150
+ strict: {
151
+ plugins: {
152
+ [x: string]: {
153
+ meta: {
154
+ name: string;
155
+ version: string;
156
+ };
157
+ rules: {
158
+ 'composable-input-flexibility': PluginRuleModule<[]>;
159
+ 'composable-naming-convention': PluginRuleModule<[]>;
160
+ 'composable-no-default-export': PluginRuleModule<[]>;
161
+ 'composable-prefer-shallowref': PluginRuleModule<[]>;
162
+ 'composable-require-cleanup': PluginRuleModule<[]>;
163
+ 'composable-return-readonly': PluginRuleModule<[]>;
164
+ 'composable-ssr-safety': PluginRuleModule<[]>;
165
+ 'consistent-ref-type-annotation': PluginRuleModule<Options>;
166
+ 'max-dependencies': PluginRuleModule<[Options$1]>;
167
+ 'no-deprecated-classes': PluginRuleModule<[]>;
168
+ 'no-deprecated-components': PluginRuleModule<Options$2>;
169
+ 'no-deprecated-props': PluginRuleModule<[]>;
170
+ 'no-dot-ts-imports': PluginRuleModule<[]>;
171
+ 'no-legacy-library-import': PluginRuleModule<[]>;
172
+ 'no-unused-i18n-keys': PluginRuleModule<Options$3>;
173
+ 'require-jsdoc-on-composable-options': PluginRuleModule<[]>;
174
+ };
175
+ };
176
+ };
177
+ rules: {
178
+ [k: string]: number;
179
+ };
180
+ } | {
181
+ plugins: string[];
182
+ rules: {
183
+ [k: string]: number;
184
+ };
185
+ };
186
+ 'strict-flat': {
187
+ plugins: {
188
+ [x: string]: {
189
+ meta: {
190
+ name: string;
191
+ version: string;
192
+ };
193
+ rules: {
194
+ 'composable-input-flexibility': PluginRuleModule<[]>;
195
+ 'composable-naming-convention': PluginRuleModule<[]>;
196
+ 'composable-no-default-export': PluginRuleModule<[]>;
197
+ 'composable-prefer-shallowref': PluginRuleModule<[]>;
198
+ 'composable-require-cleanup': PluginRuleModule<[]>;
199
+ 'composable-return-readonly': PluginRuleModule<[]>;
200
+ 'composable-ssr-safety': PluginRuleModule<[]>;
201
+ 'consistent-ref-type-annotation': PluginRuleModule<Options>;
202
+ 'max-dependencies': PluginRuleModule<[Options$1]>;
203
+ 'no-deprecated-classes': PluginRuleModule<[]>;
204
+ 'no-deprecated-components': PluginRuleModule<Options$2>;
205
+ 'no-deprecated-props': PluginRuleModule<[]>;
206
+ 'no-dot-ts-imports': PluginRuleModule<[]>;
207
+ 'no-legacy-library-import': PluginRuleModule<[]>;
208
+ 'no-unused-i18n-keys': PluginRuleModule<Options$3>;
209
+ 'require-jsdoc-on-composable-options': PluginRuleModule<[]>;
210
+ };
211
+ };
212
+ };
213
+ rules: {
214
+ [k: string]: number;
215
+ };
216
+ } | {
217
+ plugins: string[];
218
+ rules: {
219
+ [k: string]: number;
220
+ };
221
+ };
222
+ stylistic: {
223
+ plugins: {
224
+ [x: string]: {
225
+ meta: {
226
+ name: string;
227
+ version: string;
228
+ };
229
+ rules: {
230
+ 'composable-input-flexibility': PluginRuleModule<[]>;
231
+ 'composable-naming-convention': PluginRuleModule<[]>;
232
+ 'composable-no-default-export': PluginRuleModule<[]>;
233
+ 'composable-prefer-shallowref': PluginRuleModule<[]>;
234
+ 'composable-require-cleanup': PluginRuleModule<[]>;
235
+ 'composable-return-readonly': PluginRuleModule<[]>;
236
+ 'composable-ssr-safety': PluginRuleModule<[]>;
237
+ 'consistent-ref-type-annotation': PluginRuleModule<Options>;
238
+ 'max-dependencies': PluginRuleModule<[Options$1]>;
239
+ 'no-deprecated-classes': PluginRuleModule<[]>;
240
+ 'no-deprecated-components': PluginRuleModule<Options$2>;
241
+ 'no-deprecated-props': PluginRuleModule<[]>;
242
+ 'no-dot-ts-imports': PluginRuleModule<[]>;
243
+ 'no-legacy-library-import': PluginRuleModule<[]>;
244
+ 'no-unused-i18n-keys': PluginRuleModule<Options$3>;
245
+ 'require-jsdoc-on-composable-options': PluginRuleModule<[]>;
246
+ };
247
+ };
248
+ };
249
+ rules: {
250
+ [k: string]: number;
251
+ };
252
+ } | {
253
+ plugins: string[];
254
+ rules: {
255
+ [k: string]: number;
256
+ };
257
+ };
258
+ 'stylistic-flat': {
259
+ plugins: {
260
+ [x: string]: {
261
+ meta: {
262
+ name: string;
263
+ version: string;
264
+ };
265
+ rules: {
266
+ 'composable-input-flexibility': PluginRuleModule<[]>;
267
+ 'composable-naming-convention': PluginRuleModule<[]>;
268
+ 'composable-no-default-export': PluginRuleModule<[]>;
269
+ 'composable-prefer-shallowref': PluginRuleModule<[]>;
270
+ 'composable-require-cleanup': PluginRuleModule<[]>;
271
+ 'composable-return-readonly': PluginRuleModule<[]>;
272
+ 'composable-ssr-safety': PluginRuleModule<[]>;
87
273
  'consistent-ref-type-annotation': PluginRuleModule<Options>;
88
274
  'max-dependencies': PluginRuleModule<[Options$1]>;
89
275
  'no-deprecated-classes': PluginRuleModule<[]>;
@@ -91,6 +277,8 @@ declare const _default: {
91
277
  'no-deprecated-props': PluginRuleModule<[]>;
92
278
  'no-dot-ts-imports': PluginRuleModule<[]>;
93
279
  'no-legacy-library-import': PluginRuleModule<[]>;
280
+ 'no-unused-i18n-keys': PluginRuleModule<Options$3>;
281
+ 'require-jsdoc-on-composable-options': PluginRuleModule<[]>;
94
282
  };
95
283
  };
96
284
  };
@@ -114,4 +302,5 @@ type Rules = {
114
302
  [K in keyof RuleOptions]: Linter.RuleEntry<RuleOptions[K]>;
115
303
  };
116
304
 
117
- export { type RuleOptions, type Rules, _default as default };
305
+ export { _default as default };
306
+ export type { RuleOptions, Rules };