@shayanthenerd/eslint-config 0.4.5 → 0.5.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.
Files changed (66) hide show
  1. package/README.md +0 -1
  2. package/dist/configs/base.js +43 -0
  3. package/dist/configs/css.js +28 -0
  4. package/dist/configs/cypress.js +22 -0
  5. package/dist/configs/html.js +22 -0
  6. package/dist/configs/importX.js +24 -0
  7. package/dist/configs/nuxtMultiRootTemplate.js +14 -0
  8. package/dist/configs/oxlintOverrides.js +47 -0
  9. package/dist/configs/perfectionist.js +23 -0
  10. package/dist/configs/playwright.js +22 -0
  11. package/dist/configs/restrictedExports.js +19 -0
  12. package/dist/configs/storybook.js +23 -0
  13. package/dist/configs/stylistic.js +22 -0
  14. package/dist/configs/tailwind.js +42 -0
  15. package/dist/configs/typescript.js +30 -0
  16. package/dist/configs/vitest.js +22 -0
  17. package/dist/configs/vue.js +34 -0
  18. package/dist/configs/vueComponentNames.js +19 -0
  19. package/dist/index.d.ts +16 -0
  20. package/dist/index.js +54 -0
  21. package/dist/oxlint.config.jsonc +185 -0
  22. package/dist/prettier.config.d.ts +6 -0
  23. package/dist/prettier.config.js +38 -0
  24. package/dist/rules/css.js +65 -0
  25. package/dist/rules/cypress.js +15 -0
  26. package/dist/rules/html.js +53 -0
  27. package/dist/rules/importX.js +45 -0
  28. package/dist/rules/javascript.js +163 -0
  29. package/dist/rules/perfectionist.js +73 -0
  30. package/dist/rules/playwright.js +27 -0
  31. package/dist/rules/storybook.js +15 -0
  32. package/dist/rules/stylistic.js +160 -0
  33. package/dist/rules/tailwind.js +35 -0
  34. package/dist/rules/typescript.js +63 -0
  35. package/dist/rules/vitest.js +46 -0
  36. package/dist/rules/vue.js +174 -0
  37. package/dist/rules/vueAccessibility.js +23 -0
  38. package/dist/types/configOptions/base.d.ts +55 -0
  39. package/dist/types/configOptions/css.d.ts +27 -0
  40. package/dist/types/configOptions/html.d.ts +27 -0
  41. package/dist/types/configOptions/importX.d.ts +15 -0
  42. package/dist/types/configOptions/nuxt.d.ts +42 -0
  43. package/dist/types/configOptions/perfectionist.d.ts +16 -0
  44. package/dist/types/configOptions/stylistic.d.ts +145 -0
  45. package/dist/types/configOptions/tailwind.d.ts +46 -0
  46. package/dist/types/configOptions/test.d.ts +55 -0
  47. package/dist/types/configOptions/typescript.d.ts +36 -0
  48. package/dist/types/configOptions/vue.d.ts +214 -0
  49. package/dist/types/configOptions/vueAccessibility.d.ts +34 -0
  50. package/dist/types/eslint-schema.d.ts +13281 -0
  51. package/dist/types/eslintRules.d.ts +12 -0
  52. package/dist/types/helpers.d.ts +5 -0
  53. package/dist/types/index.d.ts +360 -0
  54. package/dist/utils/globs.js +29 -0
  55. package/dist/utils/ignores/defaultIgnorePatterns.js +57 -0
  56. package/dist/utils/ignores/getIgnorePatterns.js +16 -0
  57. package/dist/utils/ignores/resolveGitignorePatterns.js +26 -0
  58. package/dist/utils/isEmptyString.js +7 -0
  59. package/dist/utils/isEnabled.js +7 -0
  60. package/dist/utils/isPackageDetected.js +20 -0
  61. package/dist/utils/options/defaultOptions.js +166 -0
  62. package/dist/utils/options/enableDetectedConfigs.js +40 -0
  63. package/dist/utils/options/mergeWithDefaults.js +21 -0
  64. package/dist/utils/vue/getRestrictedVueElements.js +27 -0
  65. package/dist/utils/vue/getRestrictedVueInputs.js +23 -0
  66. package/package.json +6 -6
package/README.md CHANGED
@@ -400,7 +400,6 @@ interface options {
400
400
  },
401
401
  importX?: boolean | {
402
402
  removeUnusedImports?: boolean,
403
- requireFileExtension?: boolean,
404
403
  overrides?: {},
405
404
  },
406
405
  perfectionist?: boolean | {
@@ -0,0 +1,43 @@
1
+ import { globs } from "../utils/globs.js";
2
+ import { getJavaScriptRules } from "../rules/javascript.js";
3
+ import typescriptESLint from "typescript-eslint";
4
+ import { mergeConfigs } from "eslint-flat-config-utils";
5
+ import globals from "globals";
6
+ import javascriptESLint from "@eslint/js";
7
+
8
+ //#region src/configs/base.ts
9
+ function getBaseConfig(options) {
10
+ const { configs: { vue, base: { overrides } }, global: { globals: { node, worker, browser, commonjs, webextension, serviceworker, custom: userGlobals } } } = options;
11
+ const baseConfig = {
12
+ name: "shayanthenerd/base",
13
+ files: [globs.src, vue ? globs.vue : ""],
14
+ extends: [javascriptESLint.configs.recommended],
15
+ languageOptions: {
16
+ parser: typescriptESLint.parser,
17
+ parserOptions: {
18
+ ecmaVersion: "latest",
19
+ ecmaFeatures: {
20
+ jsx: true,
21
+ impliedStrict: true
22
+ }
23
+ },
24
+ globals: {
25
+ ...globals.builtin,
26
+ ...globals.es2026,
27
+ ...commonjs ? globals.commonjs : {},
28
+ ...node ? globals.node : {},
29
+ ...node ? globals.nodeBuiltin : {},
30
+ ...browser ? globals.browser : {},
31
+ ...worker ? globals.worker : {},
32
+ ...serviceworker ? globals.serviceworker : {},
33
+ ...webextension ? globals.webextensions : {},
34
+ ...userGlobals
35
+ }
36
+ },
37
+ rules: getJavaScriptRules(options)
38
+ };
39
+ return mergeConfigs(baseConfig, overrides);
40
+ }
41
+
42
+ //#endregion
43
+ export { getBaseConfig };
@@ -0,0 +1,28 @@
1
+ import { globs } from "../utils/globs.js";
2
+ import { isEnabled } from "../utils/isEnabled.js";
3
+ import { defaultOptions } from "../utils/options/defaultOptions.js";
4
+ import { getCSSRules } from "../rules/css.js";
5
+ import eslintCSS from "@eslint/css";
6
+ import { tailwind4 } from "tailwind-csstree";
7
+ import { mergeConfigs } from "eslint-flat-config-utils";
8
+
9
+ //#region src/configs/css.ts
10
+ function getCSSConfig(options) {
11
+ const { css } = options.configs;
12
+ const { overrides } = isEnabled(css) ? css : defaultOptions.configs.css;
13
+ const cssConfig = {
14
+ name: "shayanthenerd/css",
15
+ files: [globs.css],
16
+ extends: [eslintCSS.configs.recommended],
17
+ language: "css/css",
18
+ languageOptions: {
19
+ tolerant: true,
20
+ customSyntax: options.configs.tailwind ? tailwind4 : void 0
21
+ },
22
+ rules: getCSSRules(options)
23
+ };
24
+ return mergeConfigs(cssConfig, overrides);
25
+ }
26
+
27
+ //#endregion
28
+ export { getCSSConfig };
@@ -0,0 +1,22 @@
1
+ import { globs } from "../utils/globs.js";
2
+ import { isEnabled } from "../utils/isEnabled.js";
3
+ import { defaultOptions } from "../utils/options/defaultOptions.js";
4
+ import { getCypressRules } from "../rules/cypress.js";
5
+ import { mergeConfigs } from "eslint-flat-config-utils";
6
+ import eslintPluginCypress from "eslint-plugin-cypress";
7
+
8
+ //#region src/configs/cypress.ts
9
+ function getCypressConfig(options) {
10
+ const { cypress } = options.configs.test;
11
+ const { overrides } = isEnabled(cypress) ? cypress : defaultOptions.configs.test.cypress;
12
+ const cypressConfig = {
13
+ name: "shayanthenerd/cypress",
14
+ files: [globs.test],
15
+ extends: [eslintPluginCypress.configs.recommended],
16
+ rules: getCypressRules()
17
+ };
18
+ return mergeConfigs(cypressConfig, overrides);
19
+ }
20
+
21
+ //#endregion
22
+ export { getCypressConfig };
@@ -0,0 +1,22 @@
1
+ import { globs } from "../utils/globs.js";
2
+ import { isEnabled } from "../utils/isEnabled.js";
3
+ import { defaultOptions } from "../utils/options/defaultOptions.js";
4
+ import { getHTMLRules } from "../rules/html.js";
5
+ import { mergeConfigs } from "eslint-flat-config-utils";
6
+ import eslintPluginHTML from "@html-eslint/eslint-plugin";
7
+
8
+ //#region src/configs/html.ts
9
+ function getHTMLConfig(options) {
10
+ const { html } = options.configs;
11
+ const { overrides } = isEnabled(html) ? html : defaultOptions.configs.html;
12
+ const htmlConfig = {
13
+ name: "shayanthenerd/html",
14
+ files: [globs.html],
15
+ extends: [eslintPluginHTML.configs["flat/recommended"]],
16
+ rules: getHTMLRules(options)
17
+ };
18
+ return mergeConfigs(htmlConfig, overrides);
19
+ }
20
+
21
+ //#endregion
22
+ export { getHTMLConfig };
@@ -0,0 +1,24 @@
1
+ import { globs } from "../utils/globs.js";
2
+ import { isEnabled } from "../utils/isEnabled.js";
3
+ import { defaultOptions } from "../utils/options/defaultOptions.js";
4
+ import { getImportXRules } from "../rules/importX.js";
5
+ import { mergeConfigs } from "eslint-flat-config-utils";
6
+ import eslintPluginImportX from "eslint-plugin-import-x";
7
+ import eslintPluginUnusedImports from "eslint-plugin-unused-imports";
8
+
9
+ //#region src/configs/importX.ts
10
+ function getImportXConfig(options) {
11
+ const { vue, importX, typescript } = options.configs;
12
+ const { overrides } = isEnabled(importX) ? importX : defaultOptions.configs.importX;
13
+ const importXConfig = {
14
+ name: "shayanthenerd/import-x",
15
+ files: [globs.src, vue ? globs.vue : ""],
16
+ extends: [eslintPluginImportX.flatConfigs.recommended, typescript ? eslintPluginImportX.flatConfigs.typescript : {}],
17
+ plugins: { "unused-imports": eslintPluginUnusedImports },
18
+ rules: getImportXRules(options)
19
+ };
20
+ return mergeConfigs(importXConfig, overrides);
21
+ }
22
+
23
+ //#endregion
24
+ export { getImportXConfig };
@@ -0,0 +1,14 @@
1
+ import { globs } from "../utils/globs.js";
2
+
3
+ //#region src/configs/nuxtMultiRootTemplate.ts
4
+ function getNuxtMultiRootTemplateConfig() {
5
+ const nuxtMultiRootTemplateConfig = {
6
+ name: "shayanthenerd/nuxt/allow-multiple-template-root",
7
+ files: [globs.vueMultiRootTemplate],
8
+ rules: { "vue/no-multiple-template-root": "off" }
9
+ };
10
+ return nuxtMultiRootTemplateConfig;
11
+ }
12
+
13
+ //#endregion
14
+ export { getNuxtMultiRootTemplateConfig };
@@ -0,0 +1,47 @@
1
+ import { globs } from "../utils/globs.js";
2
+ import { isEnabled } from "../utils/isEnabled.js";
3
+ import { getJavaScriptRules } from "../rules/javascript.js";
4
+ import { getVitestRules } from "../rules/vitest.js";
5
+ import { getPlaywrightRules } from "../rules/playwright.js";
6
+ import { getTypeScriptRules } from "../rules/typescript.js";
7
+ import typescriptESLint from "typescript-eslint";
8
+ import eslintPluginVitest from "@vitest/eslint-plugin";
9
+ import eslintPluginImportX from "eslint-plugin-import-x";
10
+ import eslintPluginPlaywright from "eslint-plugin-playwright";
11
+
12
+ //#region src/configs/oxlintOverrides.ts
13
+ function getOXLintOverridesConfig(options) {
14
+ const { vue, typescript, test: { vitest, playwright } } = options.configs;
15
+ const vitestRules = getVitestRules(options);
16
+ const javascriptRules = getJavaScriptRules(options);
17
+ const typescriptRules = getTypeScriptRules(options);
18
+ const playwrightRules = getPlaywrightRules(options);
19
+ const oxlintOverridesConfig = {
20
+ name: "shayanthenerd/oxlint/overrides",
21
+ files: [
22
+ globs.src,
23
+ vue ? globs.vue : "",
24
+ vitest || playwright ? globs.test : ""
25
+ ],
26
+ plugins: {
27
+ "vitest": eslintPluginVitest,
28
+ "import-x": eslintPluginImportX,
29
+ "playwright": eslintPluginPlaywright,
30
+ "@typescript-eslint": typescriptESLint.plugin
31
+ },
32
+ rules: {
33
+ "max-depth": javascriptRules["max-depth"],
34
+ "func-style": javascriptRules["func-style"],
35
+ "max-nested-callbacks": javascriptRules["max-nested-callbacks"],
36
+ "@typescript-eslint/explicit-module-boundary-types": typescriptRules["@typescript-eslint/explicit-module-boundary-types"],
37
+ "@typescript-eslint/consistent-type-definitions": isEnabled(typescript) ? typescriptRules["@typescript-eslint/consistent-type-definitions"] : "off",
38
+ "playwright/max-nested-describe": isEnabled(playwright) ? playwrightRules["playwright/max-nested-describe"] : "off",
39
+ "vitest/consistent-test-it": isEnabled(vitest) ? vitestRules["vitest/consistent-test-it"] : "off",
40
+ "vitest/max-nested-describe": isEnabled(vitest) ? vitestRules["vitest/max-nested-describe"] : "off"
41
+ }
42
+ };
43
+ return oxlintOverridesConfig;
44
+ }
45
+
46
+ //#endregion
47
+ export { getOXLintOverridesConfig };
@@ -0,0 +1,23 @@
1
+ import { globs } from "../utils/globs.js";
2
+ import { isEnabled } from "../utils/isEnabled.js";
3
+ import { defaultOptions } from "../utils/options/defaultOptions.js";
4
+ import { getPerfectionistRules } from "../rules/perfectionist.js";
5
+ import { mergeConfigs } from "eslint-flat-config-utils";
6
+ import eslintPluginPerfectionist from "eslint-plugin-perfectionist";
7
+
8
+ //#region src/configs/perfectionist.ts
9
+ function getPerfectionistConfig(options) {
10
+ const { vue, perfectionist } = options.configs;
11
+ const { sortType, overrides } = isEnabled(perfectionist) ? perfectionist : defaultOptions.configs.perfectionist;
12
+ const perfectionistConfig = {
13
+ name: "shayanthenerd/perfectionist",
14
+ files: [globs.src, vue ? globs.vue : ""],
15
+ plugins: { perfectionist: eslintPluginPerfectionist },
16
+ settings: { perfectionist: { type: sortType } },
17
+ rules: getPerfectionistRules(options)
18
+ };
19
+ return mergeConfigs(perfectionistConfig, overrides);
20
+ }
21
+
22
+ //#endregion
23
+ export { getPerfectionistConfig };
@@ -0,0 +1,22 @@
1
+ import { globs } from "../utils/globs.js";
2
+ import { isEnabled } from "../utils/isEnabled.js";
3
+ import { defaultOptions } from "../utils/options/defaultOptions.js";
4
+ import { getPlaywrightRules } from "../rules/playwright.js";
5
+ import { mergeConfigs } from "eslint-flat-config-utils";
6
+ import eslintPluginPlaywright from "eslint-plugin-playwright";
7
+
8
+ //#region src/configs/playwright.ts
9
+ function getPlaywrightConfig(options) {
10
+ const { playwright } = options.configs.test;
11
+ const { overrides } = isEnabled(playwright) ? playwright : defaultOptions.configs.test.playwright;
12
+ const playwrightConfig = {
13
+ name: "shayanthenerd/playwright",
14
+ files: [globs.test],
15
+ extends: [eslintPluginPlaywright.configs["flat/recommended"]],
16
+ rules: getPlaywrightRules(options)
17
+ };
18
+ return mergeConfigs(playwrightConfig, overrides);
19
+ }
20
+
21
+ //#endregion
22
+ export { getPlaywrightConfig };
@@ -0,0 +1,19 @@
1
+ import { globs } from "../utils/globs.js";
2
+
3
+ //#region src/configs/restrictedExports.ts
4
+ function getRestrictedExports() {
5
+ const restrictedExportsConfig = {
6
+ name: "shayanthenerd/restricted-exports",
7
+ files: [globs.restrictedExports],
8
+ rules: { "no-restricted-exports": ["error", { restrictDefaultExports: {
9
+ named: true,
10
+ direct: true,
11
+ namedFrom: true,
12
+ namespaceFrom: true
13
+ } }] }
14
+ };
15
+ return restrictedExportsConfig;
16
+ }
17
+
18
+ //#endregion
19
+ export { getRestrictedExports };
@@ -0,0 +1,23 @@
1
+ import { globs } from "../utils/globs.js";
2
+ import { isEnabled } from "../utils/isEnabled.js";
3
+ import { defaultOptions } from "../utils/options/defaultOptions.js";
4
+ import { getStorybookRules } from "../rules/storybook.js";
5
+ import { mergeConfigs } from "eslint-flat-config-utils";
6
+ import eslintPluginStorybook from "eslint-plugin-storybook";
7
+
8
+ //#region src/configs/storybook.ts
9
+ const eslintConfigStorybook = eslintPluginStorybook.configs["flat/recommended"];
10
+ function getStorybookConfig(options) {
11
+ const { storybook } = options.configs.test;
12
+ const { overrides } = isEnabled(storybook) ? storybook : defaultOptions.configs.test.storybook;
13
+ const storybookConfig = {
14
+ name: "shayanthenerd/storybook",
15
+ files: [globs.storybook],
16
+ extends: [eslintConfigStorybook],
17
+ rules: getStorybookRules(options)
18
+ };
19
+ return mergeConfigs(storybookConfig, overrides);
20
+ }
21
+
22
+ //#endregion
23
+ export { getStorybookConfig };
@@ -0,0 +1,22 @@
1
+ import { globs } from "../utils/globs.js";
2
+ import { isEnabled } from "../utils/isEnabled.js";
3
+ import { defaultOptions } from "../utils/options/defaultOptions.js";
4
+ import { getStylisticRules } from "../rules/stylistic.js";
5
+ import { mergeConfigs } from "eslint-flat-config-utils";
6
+ import eslintPluginStylistic from "@stylistic/eslint-plugin";
7
+
8
+ //#region src/configs/stylistic.ts
9
+ function getStylisticConfig(options) {
10
+ const { stylistic } = options.configs;
11
+ const { overrides } = isEnabled(stylistic) ? stylistic : defaultOptions.configs.stylistic;
12
+ const stylisticConfig = {
13
+ name: "shayanthenerd/stylistic",
14
+ files: [globs.src, options.configs.vue ? globs.vue : ""],
15
+ extends: [eslintPluginStylistic.configs.recommended],
16
+ rules: getStylisticRules(options)
17
+ };
18
+ return mergeConfigs(stylisticConfig, overrides);
19
+ }
20
+
21
+ //#endregion
22
+ export { getStylisticConfig };
@@ -0,0 +1,42 @@
1
+ import { globs } from "../utils/globs.js";
2
+ import { isEnabled } from "../utils/isEnabled.js";
3
+ import { defaultOptions } from "../utils/options/defaultOptions.js";
4
+ import { getTailwindRules } from "../rules/tailwind.js";
5
+ import path from "node:path";
6
+ import { mergeConfigs } from "eslint-flat-config-utils";
7
+ import eslintPluginVue from "eslint-plugin-vue";
8
+ import eslintPluginHTML from "@html-eslint/eslint-plugin";
9
+ import eslintPluginTailwind from "eslint-plugin-better-tailwindcss";
10
+
11
+ //#region src/configs/tailwind.ts
12
+ const eslintParserHTML = eslintPluginHTML.configs["flat/recommended"].languageOptions.parser;
13
+ const eslintParserVue = eslintPluginVue.configs["flat/recommended"].find((config) => config.name === "vue/base/setup-for-vue")?.languageOptions?.parser;
14
+ function getTailwindConfig(options) {
15
+ const { tsConfig, configs: { vue, html, tailwind } } = options;
16
+ const { config, entryPoint, overrides } = isEnabled(tailwind) ? tailwind : defaultOptions.configs.tailwind;
17
+ const tailwindConfig = {
18
+ name: "shayanthenerd/tailwind",
19
+ files: [
20
+ globs.src,
21
+ html ? globs.html : "",
22
+ vue ? globs.vue : ""
23
+ ],
24
+ plugins: { "better-tailwindcss": eslintPluginTailwind },
25
+ languageOptions: { parserOptions: { parser: html ? eslintParserHTML : eslintParserVue } },
26
+ settings: { "better-tailwindcss": {
27
+ entryPoint,
28
+ tailwindConfig: config,
29
+ tsconfig: tsConfig ? path.resolve(tsConfig.rootDir, tsConfig.filename) : void 0,
30
+ attributes: [["^v-bind:ui$", [{ match: "objectValues" }]], ["^(?:v-bind:)?(class|activeClass|inactiveClass)$", [
31
+ { match: "strings" },
32
+ { match: "objectKeys" },
33
+ { match: "objectValues" }
34
+ ]]]
35
+ } },
36
+ rules: getTailwindRules(options)
37
+ };
38
+ return mergeConfigs(tailwindConfig, overrides);
39
+ }
40
+
41
+ //#endregion
42
+ export { getTailwindConfig };
@@ -0,0 +1,30 @@
1
+ import { globs } from "../utils/globs.js";
2
+ import { isEnabled } from "../utils/isEnabled.js";
3
+ import { defaultOptions } from "../utils/options/defaultOptions.js";
4
+ import { getTypeScriptRules } from "../rules/typescript.js";
5
+ import typescriptESLint from "typescript-eslint";
6
+ import { mergeConfigs } from "eslint-flat-config-utils";
7
+
8
+ //#region src/configs/typescript.ts
9
+ function getTypeScriptConfig(options) {
10
+ const { tsConfig, configs: { vue, typescript } } = options;
11
+ const { allowedDefaultProjects } = isEnabled(typescript) ? typescript : defaultOptions.configs.typescript;
12
+ const { overrides } = isEnabled(typescript) ? typescript : defaultOptions.configs.typescript;
13
+ const typescriptConfig = {
14
+ name: "shayanthenerd/typescript",
15
+ files: [globs.ts, vue ? globs.vue : ""],
16
+ extends: [typescriptESLint.configs.strictTypeChecked, typescriptESLint.configs.stylisticTypeChecked],
17
+ languageOptions: { parserOptions: {
18
+ tsconfigRootDir: tsConfig ? tsConfig.rootDir : void 0,
19
+ projectService: {
20
+ allowDefaultProject: allowedDefaultProjects,
21
+ defaultProject: tsConfig ? tsConfig.filename : void 0
22
+ }
23
+ } },
24
+ rules: getTypeScriptRules(options)
25
+ };
26
+ return mergeConfigs(typescriptConfig, overrides);
27
+ }
28
+
29
+ //#endregion
30
+ export { getTypeScriptConfig };
@@ -0,0 +1,22 @@
1
+ import { globs } from "../utils/globs.js";
2
+ import { isEnabled } from "../utils/isEnabled.js";
3
+ import { defaultOptions } from "../utils/options/defaultOptions.js";
4
+ import { getVitestRules } from "../rules/vitest.js";
5
+ import { mergeConfigs } from "eslint-flat-config-utils";
6
+ import eslintPluginVitest from "@vitest/eslint-plugin";
7
+
8
+ //#region src/configs/vitest.ts
9
+ function getVitestConfig(options) {
10
+ const { vitest } = options.configs.test;
11
+ const { overrides } = isEnabled(vitest) ? vitest : defaultOptions.configs.test.vitest;
12
+ const vitestConfig = {
13
+ name: "shayanthenerd/vitest",
14
+ files: [globs.test],
15
+ extends: [eslintPluginVitest.configs.recommended],
16
+ rules: getVitestRules(options)
17
+ };
18
+ return mergeConfigs(vitestConfig, overrides);
19
+ }
20
+
21
+ //#endregion
22
+ export { getVitestConfig };
@@ -0,0 +1,34 @@
1
+ import { globs } from "../utils/globs.js";
2
+ import { isEnabled } from "../utils/isEnabled.js";
3
+ import { defaultOptions } from "../utils/options/defaultOptions.js";
4
+ import { getVueRules } from "../rules/vue.js";
5
+ import { getVueAccessibilityRules } from "../rules/vueAccessibility.js";
6
+ import typescriptESLint from "typescript-eslint";
7
+ import { mergeConfigs } from "eslint-flat-config-utils";
8
+ import eslintPluginVue from "eslint-plugin-vue";
9
+ import eslintPluginVueAccessibility from "eslint-plugin-vuejs-accessibility";
10
+
11
+ //#region src/configs/vue.ts
12
+ function getVueConfig(options) {
13
+ const { vue } = options.configs;
14
+ const accessibility = isEnabled(vue) && isEnabled(vue.accessibility);
15
+ const { overrides } = isEnabled(vue) ? vue : defaultOptions.configs.vue;
16
+ const vueConfig = {
17
+ name: "shayanthenerd/vue",
18
+ files: [globs.vue],
19
+ extends: [eslintPluginVue.configs["flat/recommended"], accessibility ? eslintPluginVueAccessibility.configs["flat/recommended"] : {}],
20
+ languageOptions: { parserOptions: {
21
+ parser: typescriptESLint.parser,
22
+ extraFileExtensions: [".vue"],
23
+ vueFeatures: { filter: false }
24
+ } },
25
+ rules: {
26
+ ...getVueRules(options),
27
+ ...accessibility ? getVueAccessibilityRules(options) : {}
28
+ }
29
+ };
30
+ return mergeConfigs(vueConfig, overrides);
31
+ }
32
+
33
+ //#endregion
34
+ export { getVueConfig };
@@ -0,0 +1,19 @@
1
+ import { globs } from "../utils/globs.js";
2
+
3
+ //#region src/configs/vueComponentNames.ts
4
+ function getVueComponentNamesConfig() {
5
+ const vueComponentNamesConfig = {
6
+ name: "shayanthenerd/vue/multi-word-component-names",
7
+ files: [globs.vueComponentNames],
8
+ ignores: [globs.vueComponentNamesIgnore],
9
+ rules: {
10
+ "vue/match-component-file-name": "off",
11
+ "vue/multi-word-component-names": "off",
12
+ "vue/component-definition-name-casing": "off"
13
+ }
14
+ };
15
+ return vueComponentNamesConfig;
16
+ }
17
+
18
+ //#endregion
19
+ export { getVueComponentNamesConfig };
@@ -0,0 +1,16 @@
1
+ import { ConfigObject, Options } from "./types/index.js";
2
+ import { Linter } from "eslint";
3
+
4
+ //#region src/index.d.ts
5
+
6
+ /**
7
+ * Define the ESLint configuration based on the provided options and any number of Flat Config objects.
8
+ *
9
+ * @param {Options} options - Options to configure and customize the config
10
+ * @param {...ConfigObject} configs - Additional Flat Config objects to extend the config
11
+ *
12
+ * @returns {Linter.Config[]} The merged ESLint configuration array
13
+ */
14
+ declare function defineConfig(options?: Options, ...configs: ConfigObject[]): Linter.Config[];
15
+ //#endregion
16
+ export { defineConfig };
package/dist/index.js ADDED
@@ -0,0 +1,54 @@
1
+ import { isEnabled } from "./utils/isEnabled.js";
2
+ import { defaultOptions } from "./utils/options/defaultOptions.js";
3
+ import { getCSSConfig } from "./configs/css.js";
4
+ import { getVueConfig } from "./configs/vue.js";
5
+ import { getBaseConfig } from "./configs/base.js";
6
+ import { getHTMLConfig } from "./configs/html.js";
7
+ import { getVitestConfig } from "./configs/vitest.js";
8
+ import { getCypressConfig } from "./configs/cypress.js";
9
+ import { getImportXConfig } from "./configs/importX.js";
10
+ import { getTailwindConfig } from "./configs/tailwind.js";
11
+ import { getStorybookConfig } from "./configs/storybook.js";
12
+ import { getStylisticConfig } from "./configs/stylistic.js";
13
+ import { getPlaywrightConfig } from "./configs/playwright.js";
14
+ import { getTypeScriptConfig } from "./configs/typescript.js";
15
+ import { getPerfectionistConfig } from "./configs/perfectionist.js";
16
+ import { getRestrictedExports } from "./configs/restrictedExports.js";
17
+ import { getOXLintOverridesConfig } from "./configs/oxlintOverrides.js";
18
+ import { getIgnorePatterns } from "./utils/ignores/getIgnorePatterns.js";
19
+ import { mergeWithDefaults } from "./utils/options/mergeWithDefaults.js";
20
+ import { getVueComponentNamesConfig } from "./configs/vueComponentNames.js";
21
+ import { getNuxtMultiRootTemplateConfig } from "./configs/nuxtMultiRootTemplate.js";
22
+ import { globalIgnores } from "eslint/config";
23
+ import eslintPluginOXLint from "eslint-plugin-oxlint";
24
+ import { config } from "typescript-eslint";
25
+ import path from "node:path";
26
+
27
+ //#region src/index.ts
28
+ /**
29
+ * Define the ESLint configuration based on the provided options and any number of Flat Config objects.
30
+ *
31
+ * @param {Options} options - Options to configure and customize the config
32
+ * @param {...ConfigObject} configs - Additional Flat Config objects to extend the config
33
+ *
34
+ * @returns {Linter.Config[]} The merged ESLint configuration array
35
+ */
36
+ function defineConfig(options = {}, ...configs) {
37
+ const mergedOptions = mergeWithDefaults(options);
38
+ const { gitignore, global: { rules, ignores, settings, linterOptions }, configs: { vue, css, nuxt, html, oxlint, importX, tailwind, stylistic, typescript, perfectionist, base: { preferNamedExports }, test: { vitest, cypress, storybook, playwright } } } = mergedOptions;
39
+ const ignorePatterns = getIgnorePatterns({
40
+ gitignore,
41
+ patterns: ignores
42
+ });
43
+ const oxlintConfigPath = path.resolve(oxlint || defaultOptions.configs.oxlint);
44
+ const eslintConfig = config({
45
+ name: "shayanthenerd/global",
46
+ linterOptions,
47
+ settings,
48
+ rules
49
+ }, globalIgnores(ignorePatterns, "shayanthenerd/ignores"), getBaseConfig(mergedOptions), preferNamedExports ? getRestrictedExports() : {}, isEnabled(importX) ? getImportXConfig(mergedOptions) : {}, isEnabled(stylistic) ? getStylisticConfig(mergedOptions) : {}, isEnabled(perfectionist) ? getPerfectionistConfig(mergedOptions) : {}, isEnabled(typescript) ? getTypeScriptConfig(mergedOptions) : {}, isEnabled(html) ? getHTMLConfig(mergedOptions) : {}, isEnabled(css) ? getCSSConfig(mergedOptions) : {}, isEnabled(tailwind) ? getTailwindConfig(mergedOptions) : {}, isEnabled(vue) ? getVueConfig(mergedOptions) : {}, isEnabled(vue) ? getVueComponentNamesConfig() : {}, isEnabled(vue) && isEnabled(nuxt) ? getNuxtMultiRootTemplateConfig() : {}, isEnabled(storybook) ? getStorybookConfig(mergedOptions) : {}, isEnabled(vitest) ? getVitestConfig(mergedOptions) : {}, isEnabled(playwright) ? getPlaywrightConfig(mergedOptions) : {}, isEnabled(cypress) ? getCypressConfig(mergedOptions) : {}, ...oxlint ? eslintPluginOXLint.buildFromOxlintConfigFile(oxlintConfigPath) : [], oxlint ? getOXLintOverridesConfig(mergedOptions) : {}, ...configs);
50
+ return eslintConfig;
51
+ }
52
+
53
+ //#endregion
54
+ export { defineConfig };