@d-kuehn/eslint-config 1.0.3

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 ADDED
@@ -0,0 +1,135 @@
1
+ # @d-kuehn/eslint-config
2
+
3
+ A comprehensive collection of shareable ESLint configurations for JavaScript and TypeScript development.
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ pnpm install --save-dev @d-kuehn/eslint-config
9
+ ```
10
+
11
+ Create an `eslint.config.js` in your project root:
12
+
13
+ ```ts
14
+ import {
15
+ combine,
16
+ defaults,
17
+ importX,
18
+ jsdoc,
19
+ jsonc,
20
+ perfectionist,
21
+ playwright,
22
+ regexp,
23
+ storybook,
24
+ stylistic,
25
+ tailwindCss,
26
+ testingLibrary,
27
+ typescript,
28
+ unicorn,
29
+ vitest,
30
+ vue,
31
+ vueAccessibility,
32
+ } from '@d-kuehn/eslint-config';
33
+
34
+ export default combine(
35
+ defaults(),
36
+ typescript(),
37
+ stylistic()
38
+ // Add more configurations as needed
39
+ );
40
+ ```
41
+
42
+ ## Available Configurations
43
+
44
+ ### Core Configurations
45
+
46
+ | Configuration | Purpose | Targeted Files |
47
+ | ----------------------------------------------------------------------- | ------------------------------------------- | --------------------------------------- |
48
+ | [defaults()](https://github.com/eslint/eslint) | Base ESLint rules for JS/TS projects | All JavaScript/TypeScript files, `.vue` |
49
+ | [typescript()](https://github.com/typescript-eslint/typescript-eslint)] | TypeScript-specific rules and type checking | `.ts`, `.tsx`, `.mts`, `.cts`, `.vue` |
50
+ | [stylistic()](https://github.com/eslint-stylistic/eslint-stylistic) | Code style and formatting rules | All JavaScript/TypeScript files, `.vue` |
51
+
52
+ ### Feature-specific Configurations
53
+
54
+ | Configuration | Purpose | Targeted Files |
55
+ | ------------------------------------------------------------------------- | ------------------------------ | --------------------------------------- |
56
+ | [importX()](https://github.com/un-ts/eslint-plugin-import-x) | ES6+ import/export syntax | All JavaScript/TypeScript files, `.vue` |
57
+ | [jsdoc()](https://github.com/gajus/eslint-plugin-jsdoc) | JSDoc comments validation | All JavaScript/TypeScript files |
58
+ | [jsonc()](https://github.com/ota-meshi/eslint-plugin-jsonc) | JSON validation and formatting | `.json`, `.jsonc`, `.json5` |
59
+ | [regexp()](https://github.com/ota-meshi/eslint-plugin-regexp) | Regular expressions validation | All JavaScript/TypeScript files, `.vue` |
60
+ | [unicorn()](https://github.com/sindresorhus/eslint-plugin-unicorn) | Additional JavaScript rules | All JavaScript/TypeScript files, `.vue` |
61
+ | [perfectionist()](https://github.com/azat-io/eslint-plugin-perfectionist) | Consistent code organization | All JavaScript/TypeScript files, `.vue` |
62
+
63
+ ### Framework Support
64
+
65
+ | Configuration | Purpose | Targeted Files |
66
+ | ----------------------------------------------------------------------------------- | -------------------- | -------------------------------------- |
67
+ | [vue()](https://github.com/vuejs/eslint-plugin-vue) | Vue.js rules | `.vue` |
68
+ | [vueAccessibility()](https://github.com/vue-a11y/eslint-plugin-vuejs-accessibility) | Vue.js accessibility | `.vue` |
69
+ | [storybook()](https://github.com/storybookjs/eslint-plugin-storybook) | Storybook rules | `**/*.stories.{ts,tsx,js,jsx,mjs,cjs}` |
70
+ | [tailwindCss()](https://github.com/francoismassart/eslint-plugin-tailwindcss) | Tailwind CSS usage | `.vue`, `.js`, `.ts`, `.jsx`, `.tsx` |
71
+
72
+ ### Testing Configurations
73
+
74
+ | Configuration | Purpose | Targeted Files |
75
+ |--------------------------------------------------------------------------------------| --------------------------- | --------------------------------------------------- |
76
+ | [vitest()](https://github.com/vitest-dev/eslint-plugin-vitest) | Vitest test rules | `**/*.{spec,test,bench,benchmark}.?([cm])[jt]s?(x)` |
77
+ | [playwright()](https://github.com/playwright-community/eslint-plugin-playwright) | Playwright E2E test rules | `tests/e2e/**`, `**/*.e2e.?([cm])[jt]s?(x)` |
78
+ | [testingLibrary()](https://github.com/testing-library/eslint-plugin-testing-library) | Testing Library with Vue.js | `**/*.{spec,test,bench,benchmark}.?([cm])[jt]s?(x)` |
79
+
80
+ ## Configuration Options
81
+
82
+ Each configuration accepts an options object:
83
+
84
+ ```ts
85
+ interface Options {
86
+ ignores?: string[]; // Files to ignore
87
+ plugins?: Record<string, TSESLint.FlatConfig.Plugin | TSESLint.FlatConfig.Plugins>; // Additional ESLint plugins
88
+ rules?: Record<string, TSESLint.FlatConfig.RuleEntry>; // Custom rule configurations
89
+ }
90
+ ```
91
+
92
+ For detailed information:
93
+
94
+ - `ignores`: See ESLint [ignore](https://eslint.org/docs/latest/use/configure/ignore) patterns documentation
95
+ - `plugins`: See ESLint [plugins](https://eslint.org/docs/latest/use/configure/plugins) configuration
96
+ - `rules`: See ESLint [rules](https://eslint.org/docs/latest/use/configure/configuration-files#configuring-rules) configuration
97
+
98
+ The Typescript plugin further accept setting some
99
+ [languageOptions](https://github.com/typescript-eslint/typescript-eslint/blob/04098513a0307aa5d8b21a50ac82e5680d04a898/packages/utils/src/ts-eslint/Config.ts#L205):
100
+
101
+ ```ts
102
+ interface Options {
103
+ ignores?: string[];
104
+ plugins?: Record<string, TSESLint.FlatConfig.Plugin | TSESLint.FlatConfig.Plugins>;
105
+ rules?: Record<string, TSESLint.FlatConfig.RuleEntry>;
106
+ languageOptions?: TSESLint.FlatConfig.LanguageOptions
107
+ }
108
+ ```
109
+
110
+ Example usage with options:
111
+
112
+ ```js
113
+ export default combine(
114
+ {
115
+ languageOptions: {
116
+ globals: {
117
+ ...globals.browser,
118
+ __APP_VERSION__: 'readonly',
119
+ MaybeHTMLElement: 'readonly',
120
+ },
121
+ },
122
+ },
123
+ typescript({
124
+ ignores: ['*.test.ts'],
125
+ rules: {
126
+ '@typescript-eslint/no-explicit-any': 'off'
127
+ }
128
+ }),
129
+ stylistic({
130
+ rules: {
131
+ '@stylistic/indent': ['error', 4]
132
+ }
133
+ })
134
+ );
135
+ ```
@@ -0,0 +1,250 @@
1
+ import { TSESLint } from '@typescript-eslint/utils';
2
+
3
+ interface Options {
4
+ ignores?: string[];
5
+ plugins?: Record<string, TSESLint.FlatConfig.Plugin | TSESLint.FlatConfig.Plugins>;
6
+ rules?: Record<string, TSESLint.FlatConfig.RuleEntry>;
7
+ }
8
+ interface OptionsTypescript extends Options {
9
+ languageOptions?: TSESLint.FlatConfig.LanguageOptions;
10
+ }
11
+ type Awaitable<T> = Promise<T> | T;
12
+
13
+ /**
14
+ * generates a flat ESLint configuration for
15
+ * {@link https://github.com/eslint/eslint|eslint}
16
+ * allows additional options to be passed in for {@link https://eslint.org/docs/latest/use/configure/ignore|ignores},
17
+ * {@link https://eslint.org/docs/latest/use/configure/plugins|plugins} and
18
+ * {@link https://eslint.org/docs/latest/use/configure/configuration-files#configuring-rules|rules},
19
+ *
20
+ * @param {Options} [options={}] - an optional object that can contain additional ignores, plugins, and rules.
21
+ * @returns {TSESLint.FlatConfig.ConfigPromise} - a promise that resolves to an array of flat ESLint configurations.
22
+ */
23
+ declare const defaults: (options?: Options) => TSESLint.FlatConfig.ConfigPromise;
24
+
25
+ declare const GLOBS_EXCLUDE: string[];
26
+ declare const GLOB_VUE = "**/*.vue";
27
+ declare const GLOB_SRC = "**/*.?([cm])[jt]s?(x)";
28
+ declare const GLOB_SRC_EXT = "?([cm])[jt]s?(x)";
29
+ declare const GLOB_TS = "**/*.?([cm])ts";
30
+ declare const GLOB_TSX = "**/*.?([cm])tsx";
31
+ declare const GLOB_JS = "**/*.?([cm])js";
32
+ declare const GLOB_JSX = "**/*.?([cm])jsx";
33
+ declare const GLOB_JSON = "**/*.json";
34
+ declare const GLOB_JSON5 = "**/*.json5";
35
+ declare const GLOB_JSONC = "**/*.jsonc";
36
+ declare const GLOB_STYLE = "**/*.{c,le,sc}ss";
37
+ declare const GLOB_CSS = "**/*.css";
38
+ declare const GLOB_POSTCSS = "**/*.{p,post}css";
39
+ declare const GLOB_LESS = "**/*.less";
40
+ declare const GLOB_SCSS = "**/*.scss";
41
+ declare const GLOB_MARKDOWN = "**/*.md";
42
+ declare const GLOB_STORYBOOK = "**/*.stories.{ts,tsx,js,jsx,mjs,cjs}";
43
+ declare const GLOB_HTML = "**/*.htm?(l)";
44
+ declare const GLOBS_TESTS: string[];
45
+ declare const GLOBS_TESTS_E2E: string[];
46
+
47
+ /**
48
+ * generates a flat ESLint configuration for
49
+ * {@link https://github.com/un-ts/eslint-plugin-import-x|eslint-plugin-import-x}
50
+ * allows additional options to be passed in for {@link https://eslint.org/docs/latest/use/configure/ignore|ignores},
51
+ * {@link https://eslint.org/docs/latest/use/configure/plugins|plugins} and
52
+ * {@link https://eslint.org/docs/latest/use/configure/configuration-files#configuring-rules|rules},
53
+ *
54
+ * @param {Options} [options={}] - an optional object that can contain additional ignores, plugins, and rules.
55
+ * @returns {TSESLint.FlatConfig.ConfigPromise} - a promise that resolves to an array of flat ESLint configurations.
56
+ */
57
+ declare const importX: (options?: Options) => TSESLint.FlatConfig.ConfigPromise;
58
+
59
+ /**
60
+ * generates a flat ESLint configuration for {@link https://github.com/gajus/eslint-plugin-jsdoc|eslint-plugin-jsdoc}
61
+ * allows additional options to be passed in for {@link https://eslint.org/docs/latest/use/configure/ignore|ignores},
62
+ * {@link https://eslint.org/docs/latest/use/configure/plugins|plugins} and
63
+ * {@link https://eslint.org/docs/latest/use/configure/configuration-files#configuring-rules|rules},
64
+ *
65
+ * @param {Options} [options={}] - an optional object that can contain additional ignores, plugins, and rules.
66
+ * @returns {TSESLint.FlatConfig.ConfigPromise} - a promise that resolves to an array of flat ESLint configurations.
67
+ */
68
+ declare const jsdoc: (options?: Options) => TSESLint.FlatConfig.ConfigPromise;
69
+
70
+ /**
71
+ * generates a flat ESLint configuration for
72
+ * {@link https://github.com/ota-meshi/eslint-plugin-jsonc|eslint-plugin-jsonc}
73
+ * allows additional options to be passed in for {@link https://eslint.org/docs/latest/use/configure/ignore|ignores},
74
+ * {@link https://eslint.org/docs/latest/use/configure/plugins|plugins} and
75
+ * {@link https://eslint.org/docs/latest/use/configure/configuration-files#configuring-rules|rules},
76
+ *
77
+ * @param {Options} [options={}] - an optional object that can contain additional ignores, plugins, and rules.
78
+ * @returns {TSESLint.FlatConfig.ConfigPromise} - a promise that resolves to an array of flat ESLint configurations.
79
+ */
80
+ declare const jsonc: (options?: Options) => TSESLint.FlatConfig.ConfigPromise;
81
+
82
+ /**
83
+ * generates a flat ESLint configuration for
84
+ * {@link https://github.com/azat-io/eslint-plugin-perfectionist|eslint-plugin-perfectionist}
85
+ * allows additional options to be passed in for {@link https://eslint.org/docs/latest/use/configure/ignore|ignores},
86
+ * {@link https://eslint.org/docs/latest/use/configure/plugins|plugins} and
87
+ * {@link https://eslint.org/docs/latest/use/configure/configuration-files#configuring-rules|rules},
88
+ *
89
+ * @param {Options} [options={}] - an optional object that can contain additional ignores, plugins, and rules.
90
+ * @returns {TSESLint.FlatConfig.ConfigPromise} - a promise that resolves to an array of flat ESLint configurations.
91
+ */
92
+ declare const perfectionist: (options?: Options) => TSESLint.FlatConfig.ConfigPromise;
93
+
94
+ /**
95
+ * generates a flat ESLint configuration for
96
+ * {@link https://github.com/playwright-community/eslint-plugin-playwright|eslint-plugin-playwright}
97
+ * allows additional options to be passed in for {@link https://eslint.org/docs/latest/use/configure/ignore|ignores},
98
+ * {@link https://eslint.org/docs/latest/use/configure/plugins|plugins} and
99
+ * {@link https://eslint.org/docs/latest/use/configure/configuration-files#configuring-rules|rules},
100
+ *
101
+ * @param {Options} [options={}] - an optional object that can contain additional ignores, plugins, and rules.
102
+ * @returns {TSESLint.FlatConfig.ConfigPromise} - a promise that resolves to an array of flat ESLint configurations.
103
+ */
104
+ declare const playwright: (options?: Options) => TSESLint.FlatConfig.ConfigPromise;
105
+
106
+ /**
107
+ * generates a flat ESLint configuration for
108
+ * {@link https://github.com/ota-meshi/eslint-plugin-regexp|eslint-plugin-regexp}
109
+ * allows additional options to be passed in for {@link https://eslint.org/docs/latest/use/configure/ignore|ignores},
110
+ * {@link https://eslint.org/docs/latest/use/configure/plugins|plugins} and
111
+ * {@link https://eslint.org/docs/latest/use/configure/configuration-files#configuring-rules|rules},
112
+ *
113
+ * @param {Options} [options={}] - an optional object that can contain additional ignores, plugins, and rules.
114
+ * @returns {TSESLint.FlatConfig.ConfigPromise} - a promise that resolves to an array of flat ESLint configurations.
115
+ */
116
+ declare const regexp: (options?: Options) => TSESLint.FlatConfig.ConfigPromise;
117
+
118
+ /**
119
+ * generates a flat ESLint configuration for
120
+ * {@link https://github.com/storybookjs/eslint-plugin-storybook|eslint-plugin-storybook}
121
+ * allows additional options to be passed in for {@link https://eslint.org/docs/latest/use/configure/ignore|ignores},
122
+ * {@link https://eslint.org/docs/latest/use/configure/plugins|plugins} and
123
+ * {@link https://eslint.org/docs/latest/use/configure/configuration-files#configuring-rules|rules},
124
+ *
125
+ * @param {Options} [options={}] - an optional object that can contain additional ignores, plugins, and rules.
126
+ * @returns {TSESLint.FlatConfig.ConfigPromise} - a promise that resolves to an array of flat ESLint configurations.
127
+ */
128
+ declare const storybook: (options?: Options) => TSESLint.FlatConfig.ConfigPromise;
129
+
130
+ /**
131
+ * generates a flat ESLint configuration for
132
+ * {@link https://github.com/eslint-stylistic/eslint-stylistic|@stylistic/eslint-plugin}
133
+ * allows additional options to be passed in for {@link https://eslint.org/docs/latest/use/configure/ignore|ignores},
134
+ * {@link https://eslint.org/docs/latest/use/configure/plugins|plugins} and
135
+ * {@link https://eslint.org/docs/latest/use/configure/configuration-files#configuring-rules|rules},
136
+ *
137
+ * @param {Options} [options={}] - an optional object that can contain additional ignores, plugins, and rules.
138
+ * @returns {TSESLint.FlatConfig.ConfigPromise} - a promise that resolves to an array of flat ESLint configurations.
139
+ */
140
+ declare const stylistic: (options?: Options) => TSESLint.FlatConfig.ConfigPromise;
141
+
142
+ /**
143
+ * generates a flat ESLint configuration for
144
+ * {@link https://github.com/francoismassart/eslint-plugin-tailwindcss|eslint-plugin-tailwindcss}
145
+ * allows additional options to be passed in for {@link https://eslint.org/docs/latest/use/configure/ignore|ignores},
146
+ * {@link https://eslint.org/docs/latest/use/configure/plugins|plugins} and
147
+ * {@link https://eslint.org/docs/latest/use/configure/configuration-files#configuring-rules|rules},
148
+ *
149
+ * @param {Options} [options={}] - an optional object that can contain additional ignores, plugins, and rules.
150
+ * @returns {TSESLint.FlatConfig.ConfigPromise} - a promise that resolves to an array of flat ESLint configurations.
151
+ */
152
+ declare const tailwindCss: (options?: Options) => TSESLint.FlatConfig.ConfigPromise;
153
+
154
+ /**
155
+ * generates a flat ESLint configuration for
156
+ * {@link https://github.com/testing-library/eslint-plugin-testing-library|eslint-plugin-testing-library}
157
+ * allows additional options to be passed in for {@link https://eslint.org/docs/latest/use/configure/ignore|ignores},
158
+ * {@link https://eslint.org/docs/latest/use/configure/plugins|plugins} and
159
+ * {@link https://eslint.org/docs/latest/use/configure/configuration-files#configuring-rules|rules},
160
+ *
161
+ * @param {Options} [options={}] - an optional object that can contain additional ignores, plugins, and rules.
162
+ * @returns {TSESLint.FlatConfig.ConfigPromise} - a promise that resolves to an array of flat ESLint configurations.
163
+ */
164
+ declare const testingLibrary: (options?: Options) => TSESLint.FlatConfig.ConfigPromise;
165
+
166
+ /**
167
+ * generates a flat ESLint configuration for
168
+ * {@link https://github.com/typescript-eslint/typescript-eslint|typescript-eslint}
169
+ * allows additional options to be passed in for {@link https://eslint.org/docs/latest/use/configure/ignore|ignores},
170
+ * {@link https://eslint.org/docs/latest/use/configure/plugins|plugins} and
171
+ * {@link https://eslint.org/docs/latest/use/configure/configuration-files#configuring-rules|rules},
172
+ *
173
+ * @param {OptionsTypescript} [options={}] - an optional object that can contain additional ignores, plugins, and rules
174
+ * @returns {TSESLint.FlatConfig.ConfigPromise} - a promise that resolves to an array of flat ESLint configurations
175
+ */
176
+ declare const typescript: (options?: OptionsTypescript) => TSESLint.FlatConfig.ConfigPromise;
177
+
178
+ /**
179
+ * generates a flat ESLint configuration for
180
+ * {@link https://github.com/sindresorhus/eslint-plugin-unicorn|eslint-plugin-unicorn}
181
+ * allows additional options to be passed in for {@link https://eslint.org/docs/latest/use/configure/ignore|ignores},
182
+ * {@link https://eslint.org/docs/latest/use/configure/plugins|plugins} and
183
+ * {@link https://eslint.org/docs/latest/use/configure/configuration-files#configuring-rules|rules},
184
+ *
185
+ * @param {Options} [options={}] - an optional object that can contain additional ignores, plugins, and rules.
186
+ * @returns {TSESLint.FlatConfig.ConfigPromise} - a promise that resolves to an array of flat ESLint configurations.
187
+ */
188
+ declare const unicorn: (options?: Options) => TSESLint.FlatConfig.ConfigPromise;
189
+
190
+ /**
191
+ * generates a flat ESLint configuration for
192
+ * {@link https://github.com/vitest-dev/eslint-plugin-vitest|@vitest/eslint-plugin}
193
+ * allows additional options to be passed in for {@link https://eslint.org/docs/latest/use/configure/ignore|ignores},
194
+ * {@link https://eslint.org/docs/latest/use/configure/plugins|plugins} and
195
+ * {@link https://eslint.org/docs/latest/use/configure/configuration-files#configuring-rules|rules},
196
+ *
197
+ * @param {Options} [options={}] - an optional object that can contain additional ignores, plugins, and rules.
198
+ * @returns {TSESLint.FlatConfig.ConfigPromise} - a promise that resolves to an array of flat ESLint configurations.
199
+ */
200
+ declare const vitest: (options?: Options) => TSESLint.FlatConfig.ConfigPromise;
201
+
202
+ /**
203
+ * generates a flat ESLint configuration for
204
+ * {@link https://github.com/vuejs/eslint-plugin-vue|eslint-plugin-vue}
205
+ * allows additional options to be passed in for {@link https://eslint.org/docs/latest/use/configure/ignore|ignores},
206
+ * {@link https://eslint.org/docs/latest/use/configure/plugins|plugins} and
207
+ * {@link https://eslint.org/docs/latest/use/configure/configuration-files#configuring-rules|rules},
208
+ *
209
+ * @param {Options} [options={}] - an optional object that can contain additional ignores, plugins, and rules.
210
+ * @returns {TSESLint.FlatConfig.ConfigPromise} - a promise that resolves to an array of flat ESLint configurations.
211
+ */
212
+ declare const vue: (options?: Options) => TSESLint.FlatConfig.ConfigPromise;
213
+
214
+ /**
215
+ * generates a flat ESLint configuration for
216
+ * {@link https://github.com/vue-a11y/eslint-plugin-vuejs-accessibility|eslint-plugin-vuejs-accessibility}
217
+ * allows additional options to be passed in for {@link https://eslint.org/docs/latest/use/configure/ignore|ignores},
218
+ * {@link https://eslint.org/docs/latest/use/configure/plugins|plugins} and
219
+ * {@link https://eslint.org/docs/latest/use/configure/configuration-files#configuring-rules|rules},
220
+ *
221
+ * @param {Options} [options={}] - an optional object that can contain additional ignores, plugins, and rules.
222
+ * @returns {TSESLint.FlatConfig.ConfigPromise} - a promise that resolves to an array of flat ESLint configurations.
223
+ */
224
+ declare const vueAccessibility: (options?: Options) => TSESLint.FlatConfig.ConfigPromise;
225
+
226
+ /**
227
+ * combines multiple ESLint flat configurations into a single array.
228
+ * useful for merging different configuration sources that might be provided as individual configs
229
+ * or arrays of configs, handling both synchronous and asynchronous inputs
230
+ *
231
+ * @param {...Awaitable<TSESLint.FlatConfig.Config
232
+ * | TSESLint.FlatConfig.Config[]>} configs - variable number of ESLint configurations
233
+ * each parameter can be:
234
+ * - a single FlatConfig.Config object
235
+ * - an array of FlatConfig.Config objects
236
+ * - a Promise that resolves to either of the above
237
+ *
238
+ * @returns {Promise<TSESLint.FlatConfig.Config[]>} a promise that resolves to a flattened array
239
+ * containing all provided configurations
240
+ *
241
+ * @example
242
+ * const allConfigs = await combine(
243
+ * baseConfig,
244
+ * Promise.resolve(additionalConfig),
245
+ * [customConfig1, customConfig2]
246
+ * );
247
+ */
248
+ declare const combine: (...configs: Awaitable<TSESLint.FlatConfig.Config | TSESLint.FlatConfig.Config[]>[]) => Promise<TSESLint.FlatConfig.Config[]>;
249
+
250
+ export { GLOBS_EXCLUDE, GLOBS_TESTS, GLOBS_TESTS_E2E, GLOB_CSS, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_MARKDOWN, GLOB_POSTCSS, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STORYBOOK, GLOB_STYLE, GLOB_TS, GLOB_TSX, GLOB_VUE, combine, defaults, importX, jsdoc, jsonc, perfectionist, playwright, regexp, storybook, stylistic, tailwindCss, testingLibrary, typescript, unicorn, vitest, vue, vueAccessibility };