@ghettoddos/eslint-config 1.6.2 → 1.7.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 (4) hide show
  1. package/README.md +3 -3
  2. package/dist/index.d.ts +3849 -1726
  3. package/dist/index.js +253 -129
  4. package/package.json +37 -33
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import { FlatConfigComposer } from "eslint-flat-config-utils";
2
2
  import { isPackageExists } from "local-pkg";
3
3
  import pluginComments from "@eslint-community/eslint-plugin-eslint-comments";
4
4
  import pluginAntfu from "eslint-plugin-antfu";
5
- import * as pluginImport from "eslint-plugin-import-x";
5
+ import pluginImportLite from "eslint-plugin-import-lite";
6
6
  import pluginNode from "eslint-plugin-n";
7
7
  import pluginPerfectionist from "eslint-plugin-perfectionist";
8
8
  import pluginUnicorn from "eslint-plugin-unicorn";
@@ -45,6 +45,7 @@ const GLOB_JSON5 = "**/*.json5";
45
45
  const GLOB_JSONC = "**/*.jsonc";
46
46
  const GLOB_MARKDOWN = "**/*.md";
47
47
  const GLOB_MARKDOWN_IN_MARKDOWN = "**/*.md/*.md";
48
+ const GLOB_VUE = "**/*.vue";
48
49
  const GLOB_YAML = "**/*.y?(a)ml";
49
50
  const GLOB_TOML = "**/*.toml";
50
51
  const GLOB_XML = "**/*.xml";
@@ -113,7 +114,6 @@ async function disables() {
113
114
  name: "disables/dts",
114
115
  rules: {
115
116
  "eslint-comments/no-unlimited-disable": "off",
116
- "import/no-duplicates": "off",
117
117
  "no-restricted-syntax": "off",
118
118
  "unused-imports/no-unused-vars": "off"
119
119
  }
@@ -137,6 +137,12 @@ const ReactRouterPackages = [
137
137
  "@react-router/dev"
138
138
  ];
139
139
  const NextJsPackages = ["next"];
140
+ const VuePackages = [
141
+ "vue",
142
+ "nuxt",
143
+ "vitepress",
144
+ "@slidev/cli"
145
+ ];
140
146
 
141
147
  //#endregion
142
148
  //#region src/utils.ts
@@ -414,115 +420,6 @@ async function formatters(options = {}, stylistic$1 = {}) {
414
420
  return configs$1;
415
421
  }
416
422
 
417
- //#endregion
418
- //#region src/configs/fsd.ts
419
- const FS_LAYERS = [
420
- "app",
421
- "processes",
422
- "pages",
423
- "widgets",
424
- "features",
425
- "entities",
426
- "shared"
427
- ];
428
- const FS_SEGMENTS = [
429
- "ui",
430
- "model",
431
- "lib",
432
- "api",
433
- "config",
434
- "assets"
435
- ];
436
- function getLowerLayers(layer) {
437
- return FS_LAYERS.slice(FS_LAYERS.indexOf(layer) + 1);
438
- }
439
- function getUpperLayers(layer) {
440
- return FS_LAYERS.slice(0, FS_LAYERS.indexOf(layer));
441
- }
442
- const FS_SLICED_LAYERS_REG = getUpperLayers("shared").join("|");
443
- const FS_SEGMENTS_REG = [...FS_SEGMENTS, ...FS_SEGMENTS.map((seg) => `${seg}.*`)].join("|");
444
- function getNotSharedLayersRules() {
445
- return getUpperLayers("shared").map((layer) => ({
446
- allow: getLowerLayers(layer),
447
- from: layer
448
- }));
449
- }
450
- const slicelessLayerRules = [{
451
- allow: "shared",
452
- from: "shared"
453
- }, {
454
- allow: "app",
455
- from: "app"
456
- }];
457
- function getLayersBoundariesElements() {
458
- return FS_LAYERS.map((layer) => ({
459
- capture: ["slices"],
460
- mode: "folder",
461
- pattern: `${layer}/!(_*){,/*}`,
462
- type: layer
463
- }));
464
- }
465
- function getGodModeRules() {
466
- return FS_LAYERS.map((layer) => ({
467
- allow: [layer, ...getLowerLayers(layer)],
468
- from: `gm_${layer}`
469
- }));
470
- }
471
- function getGodModeElements() {
472
- return FS_LAYERS.map((layer) => ({
473
- capture: ["slices"],
474
- mode: "folder",
475
- pattern: `${layer}/_*`,
476
- type: `gm_${layer}`
477
- }));
478
- }
479
- async function fsd(options = {}) {
480
- const { layersSlices: enableLayersSlices = true, publicApi: enablePublicApi = true } = options;
481
- const configs$1 = [];
482
- if (enablePublicApi) {
483
- const { lite = true } = resolveSubOptions(options, "publicApi");
484
- configs$1.push({
485
- name: "fsd/public-api",
486
- rules: {
487
- "import/no-internal-modules": ["error", { allow: [
488
- `**/*(${FS_SLICED_LAYERS_REG})/!(${FS_SEGMENTS_REG})`,
489
- `**/*(${FS_SLICED_LAYERS_REG})/!(${FS_SEGMENTS_REG})/!(${FS_SEGMENTS_REG})`,
490
- `**/*shared/*(${FS_SEGMENTS_REG})/!(${FS_SEGMENTS_REG})`,
491
- `**/*shared/*(${FS_SEGMENTS_REG})`,
492
- `**/node_modules/**`,
493
- `**/*shared/_*`,
494
- `**/*shared/_*/*`,
495
- ...lite ? [`./**`] : []
496
- ] }],
497
- ...getOverrides(options, "publicApi")
498
- }
499
- });
500
- }
501
- if (enableLayersSlices) {
502
- await ensurePackages(["eslint-plugin-boundaries"]);
503
- const [pluginBoundaries] = await Promise.all([interopDefault(import("eslint-plugin-boundaries"))]);
504
- configs$1.push({
505
- name: "fsd/layers-slices",
506
- plugins: { boundaries: pluginBoundaries },
507
- rules: {
508
- ...pluginBoundaries.configs.recommended.rules,
509
- "boundaries/element-types": [2, {
510
- default: "disallow",
511
- message: "\"${file.type}\" is not allowed to import \"${dependency.type}\" | See rules: https://feature-sliced.design/docs/reference/layers/overview ",
512
- rules: [
513
- ...getNotSharedLayersRules(),
514
- ...slicelessLayerRules,
515
- ...getGodModeRules()
516
- ]
517
- }],
518
- ...getOverrides(options, "layersSlices")
519
- },
520
- settings: { "boundaries/elements": [...getLayersBoundariesElements(), ...getGodModeElements()] }
521
- });
522
- }
523
- return configs$1;
524
- }
525
-
526
423
  //#endregion
527
424
  //#region src/configs/ignores.ts
528
425
  async function ignores(userIgnores = []) {
@@ -535,25 +432,24 @@ async function ignores(userIgnores = []) {
535
432
  //#endregion
536
433
  //#region src/configs/imports.ts
537
434
  async function imports(options = {}) {
538
- const { stylistic: stylistic$1 = true } = options;
435
+ const { overrides = {}, stylistic: stylistic$1 = true } = options;
539
436
  return [{
540
437
  name: "imports/rules",
541
438
  plugins: {
542
439
  antfu: pluginAntfu,
543
- import: pluginImport
440
+ import: pluginImportLite
544
441
  },
545
442
  rules: {
546
443
  "antfu/import-dedupe": "error",
547
444
  "antfu/no-import-dist": "error",
548
445
  "antfu/no-import-node-modules-by-path": "error",
549
- "import/consistent-type-specifier-style": ["error", "prefer-top-level"],
446
+ "import/consistent-type-specifier-style": ["error", "top-level"],
550
447
  "import/first": "error",
551
448
  "import/no-duplicates": "error",
552
449
  "import/no-mutable-exports": "error",
553
450
  "import/no-named-default": "error",
554
- "import/no-self-import": "error",
555
- "import/no-webpack-loader-syntax": "error",
556
- ...stylistic$1 ? { "import/newline-after-import": ["error", { count: 1 }] } : {}
451
+ ...stylistic$1 ? { "import/newline-after-import": ["error", { count: 1 }] } : {},
452
+ ...overrides
557
453
  }
558
454
  }];
559
455
  }
@@ -841,7 +737,7 @@ async function jsonc(options = {}) {
841
737
  multiline: true
842
738
  }],
843
739
  "jsonc/object-curly-spacing": ["error", "always"],
844
- "jsonc/object-property-newline": ["error", { allowMultiplePropertiesPerLine: true }],
740
+ "jsonc/object-property-newline": ["error", { allowAllPropertiesOnSameLine: true }],
845
741
  "jsonc/quote-props": "error",
846
742
  "jsonc/quotes": "error"
847
743
  } : {},
@@ -912,7 +808,6 @@ async function markdown(options = {}) {
912
808
  name: "markdown/disables",
913
809
  rules: {
914
810
  "antfu/no-top-level-await": "off",
915
- "import/newline-after-import": "off",
916
811
  "no-alert": "off",
917
812
  "no-console": "off",
918
813
  "no-labels": "off",
@@ -925,6 +820,7 @@ async function markdown(options = {}) {
925
820
  "node/prefer-global/process": "off",
926
821
  "style/comma-dangle": "off",
927
822
  "style/eol-last": "off",
823
+ "style/padding-line-between-statements": "off",
928
824
  "ts/consistent-type-imports": "off",
929
825
  "ts/explicit-function-return-type": "off",
930
826
  "ts/no-namespace": "off",
@@ -945,12 +841,19 @@ async function markdown(options = {}) {
945
841
  //#endregion
946
842
  //#region src/configs/next.ts
947
843
  async function next(options = {}) {
948
- const { overrides = {} } = options;
844
+ const { files = [GLOB_SRC], overrides = {} } = options;
949
845
  await ensurePackages(["@next/eslint-plugin-next"]);
950
- const [pluginNext] = await Promise.all([interopDefault(import("@next/eslint-plugin-next"))]);
846
+ const pluginNextJS = await interopDefault(import("@next/eslint-plugin-next"));
951
847
  return [{
848
+ name: "next/setup",
849
+ plugins: { next: pluginNextJS }
850
+ }, {
851
+ files,
852
+ languageOptions: {
853
+ parserOptions: { ecmaFeatures: { jsx: true } },
854
+ sourceType: "module"
855
+ },
952
856
  name: "next/rules",
953
- plugins: { next: pluginNext },
954
857
  rules: {
955
858
  "next/google-font-display": "warn",
956
859
  "next/google-font-preconnect": "warn",
@@ -974,7 +877,8 @@ async function next(options = {}) {
974
877
  "next/no-typos": "warn",
975
878
  "next/no-unwanted-polyfillio": "warn",
976
879
  ...overrides
977
- }
880
+ },
881
+ settings: { react: { version: "detect" } }
978
882
  }];
979
883
  }
980
884
 
@@ -1199,7 +1103,11 @@ async function react(options = {}) {
1199
1103
  "links",
1200
1104
  "headers",
1201
1105
  "loader",
1202
- "action"
1106
+ "action",
1107
+ "clientLoader",
1108
+ "clientAction",
1109
+ "handle",
1110
+ "shouldRevalidate"
1203
1111
  ] : []]
1204
1112
  }],
1205
1113
  ...overrides
@@ -1343,7 +1251,7 @@ async function sortPackageJson() {
1343
1251
  */
1344
1252
  function sortTsconfig() {
1345
1253
  return [{
1346
- files: ["**/tsconfig.json", "**/tsconfig.*.json"],
1254
+ files: ["**/[jt]sconfig.json", "**/[jt]sconfig.*.json"],
1347
1255
  name: "sort/tsconfig-json",
1348
1256
  rules: { "jsonc/sort-keys": [
1349
1257
  "error",
@@ -1680,6 +1588,212 @@ async function unocss(options = {}) {
1680
1588
  }];
1681
1589
  }
1682
1590
 
1591
+ //#endregion
1592
+ //#region src/configs/vue.ts
1593
+ async function vue(options = {}) {
1594
+ const { a11y = false, files = [GLOB_VUE], overrides = {}, stylistic: stylistic$1 = true, vueVersion = 3 } = options;
1595
+ const sfcBlocks = options.sfcBlocks === true ? {} : options.sfcBlocks ?? {};
1596
+ const { indent = 2 } = typeof stylistic$1 === "boolean" ? {} : stylistic$1;
1597
+ if (a11y) await ensurePackages(["eslint-plugin-vuejs-accessibility"]);
1598
+ const [pluginVue, parserVue, processorVueBlocks, pluginVueA11y] = await Promise.all([
1599
+ interopDefault(import("eslint-plugin-vue")),
1600
+ interopDefault(import("vue-eslint-parser")),
1601
+ interopDefault(import("eslint-processor-vue-blocks")),
1602
+ ...a11y ? [interopDefault(import("eslint-plugin-vuejs-accessibility"))] : []
1603
+ ]);
1604
+ return [{
1605
+ languageOptions: { globals: {
1606
+ computed: "readonly",
1607
+ defineEmits: "readonly",
1608
+ defineExpose: "readonly",
1609
+ defineProps: "readonly",
1610
+ onMounted: "readonly",
1611
+ onUnmounted: "readonly",
1612
+ reactive: "readonly",
1613
+ ref: "readonly",
1614
+ shallowReactive: "readonly",
1615
+ shallowRef: "readonly",
1616
+ toRef: "readonly",
1617
+ toRefs: "readonly",
1618
+ watch: "readonly",
1619
+ watchEffect: "readonly"
1620
+ } },
1621
+ name: "antfu/vue/setup",
1622
+ plugins: {
1623
+ vue: pluginVue,
1624
+ ...a11y ? { "vue-a11y": pluginVueA11y } : {}
1625
+ }
1626
+ }, {
1627
+ files,
1628
+ languageOptions: {
1629
+ parser: parserVue,
1630
+ parserOptions: {
1631
+ ecmaFeatures: { jsx: true },
1632
+ extraFileExtensions: [".vue"],
1633
+ parser: options.typescript ? await interopDefault(import("@typescript-eslint/parser")) : null,
1634
+ sourceType: "module"
1635
+ }
1636
+ },
1637
+ name: "antfu/vue/rules",
1638
+ processor: sfcBlocks === false ? pluginVue.processors[".vue"] : mergeProcessors([pluginVue.processors[".vue"], processorVueBlocks({
1639
+ ...sfcBlocks,
1640
+ blocks: {
1641
+ styles: true,
1642
+ ...sfcBlocks.blocks
1643
+ }
1644
+ })]),
1645
+ rules: {
1646
+ ...pluginVue.configs.base.rules,
1647
+ ...vueVersion === 2 ? {
1648
+ ...pluginVue.configs["vue2-essential"].rules,
1649
+ ...pluginVue.configs["vue2-strongly-recommended"].rules,
1650
+ ...pluginVue.configs["vue2-recommended"].rules
1651
+ } : {
1652
+ ...pluginVue.configs["flat/essential"].map((c) => c.rules).reduce((acc, c) => ({
1653
+ ...acc,
1654
+ ...c
1655
+ }), {}),
1656
+ ...pluginVue.configs["flat/strongly-recommended"].map((c) => c.rules).reduce((acc, c) => ({
1657
+ ...acc,
1658
+ ...c
1659
+ }), {}),
1660
+ ...pluginVue.configs["flat/recommended"].map((c) => c.rules).reduce((acc, c) => ({
1661
+ ...acc,
1662
+ ...c
1663
+ }), {})
1664
+ },
1665
+ "antfu/no-top-level-await": "off",
1666
+ "node/prefer-global/process": "off",
1667
+ "ts/explicit-function-return-type": "off",
1668
+ "vue/block-order": ["error", { order: [
1669
+ "script",
1670
+ "template",
1671
+ "style"
1672
+ ] }],
1673
+ "vue/component-name-in-template-casing": ["error", "PascalCase"],
1674
+ "vue/component-options-name-casing": ["error", "PascalCase"],
1675
+ "vue/component-tags-order": "off",
1676
+ "vue/custom-event-name-casing": ["error", "camelCase"],
1677
+ "vue/define-macros-order": ["error", { order: [
1678
+ "defineOptions",
1679
+ "defineProps",
1680
+ "defineEmits",
1681
+ "defineSlots"
1682
+ ] }],
1683
+ "vue/dot-location": ["error", "property"],
1684
+ "vue/dot-notation": ["error", { allowKeywords: true }],
1685
+ "vue/eqeqeq": ["error", "smart"],
1686
+ "vue/html-indent": ["error", indent],
1687
+ "vue/html-quotes": ["error", "double"],
1688
+ "vue/max-attributes-per-line": "off",
1689
+ "vue/multi-word-component-names": "off",
1690
+ "vue/no-dupe-keys": "off",
1691
+ "vue/no-empty-pattern": "error",
1692
+ "vue/no-irregular-whitespace": "error",
1693
+ "vue/no-loss-of-precision": "error",
1694
+ "vue/no-restricted-syntax": [
1695
+ "error",
1696
+ "DebuggerStatement",
1697
+ "LabeledStatement",
1698
+ "WithStatement"
1699
+ ],
1700
+ "vue/no-restricted-v-bind": ["error", "/^v-/"],
1701
+ "vue/no-setup-props-reactivity-loss": "off",
1702
+ "vue/no-sparse-arrays": "error",
1703
+ "vue/no-unused-refs": "error",
1704
+ "vue/no-useless-v-bind": "error",
1705
+ "vue/no-v-html": "off",
1706
+ "vue/object-shorthand": [
1707
+ "error",
1708
+ "always",
1709
+ {
1710
+ avoidQuotes: true,
1711
+ ignoreConstructors: false
1712
+ }
1713
+ ],
1714
+ "vue/prefer-separate-static-class": "error",
1715
+ "vue/prefer-template": "error",
1716
+ "vue/prop-name-casing": ["error", "camelCase"],
1717
+ "vue/require-default-prop": "off",
1718
+ "vue/require-prop-types": "off",
1719
+ "vue/space-infix-ops": "error",
1720
+ "vue/space-unary-ops": ["error", {
1721
+ nonwords: false,
1722
+ words: true
1723
+ }],
1724
+ ...stylistic$1 ? {
1725
+ "vue/array-bracket-spacing": ["error", "never"],
1726
+ "vue/arrow-spacing": ["error", {
1727
+ after: true,
1728
+ before: true
1729
+ }],
1730
+ "vue/block-spacing": ["error", "always"],
1731
+ "vue/block-tag-newline": ["error", {
1732
+ multiline: "always",
1733
+ singleline: "always"
1734
+ }],
1735
+ "vue/brace-style": [
1736
+ "error",
1737
+ "stroustrup",
1738
+ { allowSingleLine: true }
1739
+ ],
1740
+ "vue/comma-dangle": ["error", "always-multiline"],
1741
+ "vue/comma-spacing": ["error", {
1742
+ after: true,
1743
+ before: false
1744
+ }],
1745
+ "vue/comma-style": ["error", "last"],
1746
+ "vue/html-comment-content-spacing": [
1747
+ "error",
1748
+ "always",
1749
+ { exceptions: ["-"] }
1750
+ ],
1751
+ "vue/key-spacing": ["error", {
1752
+ afterColon: true,
1753
+ beforeColon: false
1754
+ }],
1755
+ "vue/keyword-spacing": ["error", {
1756
+ after: true,
1757
+ before: true
1758
+ }],
1759
+ "vue/object-curly-newline": "off",
1760
+ "vue/object-curly-spacing": ["error", "always"],
1761
+ "vue/object-property-newline": ["error", { allowAllPropertiesOnSameLine: true }],
1762
+ "vue/operator-linebreak": ["error", "before"],
1763
+ "vue/padding-line-between-blocks": ["error", "always"],
1764
+ "vue/quote-props": ["error", "consistent-as-needed"],
1765
+ "vue/space-in-parens": ["error", "never"],
1766
+ "vue/template-curly-spacing": "error"
1767
+ } : {},
1768
+ ...a11y ? {
1769
+ "vue-a11y/alt-text": "error",
1770
+ "vue-a11y/anchor-has-content": "error",
1771
+ "vue-a11y/aria-props": "error",
1772
+ "vue-a11y/aria-role": "error",
1773
+ "vue-a11y/aria-unsupported-elements": "error",
1774
+ "vue-a11y/click-events-have-key-events": "error",
1775
+ "vue-a11y/form-control-has-label": "error",
1776
+ "vue-a11y/heading-has-content": "error",
1777
+ "vue-a11y/iframe-has-title": "error",
1778
+ "vue-a11y/interactive-supports-focus": "error",
1779
+ "vue-a11y/label-has-for": "error",
1780
+ "vue-a11y/media-has-caption": "warn",
1781
+ "vue-a11y/mouse-events-have-key-events": "error",
1782
+ "vue-a11y/no-access-key": "error",
1783
+ "vue-a11y/no-aria-hidden-on-focusable": "error",
1784
+ "vue-a11y/no-autofocus": "warn",
1785
+ "vue-a11y/no-distracting-elements": "error",
1786
+ "vue-a11y/no-redundant-roles": "error",
1787
+ "vue-a11y/no-role-presentation-on-focusable": "error",
1788
+ "vue-a11y/no-static-element-interactions": "error",
1789
+ "vue-a11y/role-has-required-aria-props": "error",
1790
+ "vue-a11y/tabindex-no-positive": "warn"
1791
+ } : {},
1792
+ ...overrides
1793
+ }
1794
+ }];
1795
+ }
1796
+
1683
1797
  //#endregion
1684
1798
  //#region src/configs/yaml.ts
1685
1799
  async function yaml(options = {}) {
@@ -1777,7 +1891,7 @@ const defaultPluginRenaming = {
1777
1891
  "@eslint-react/naming-convention": "react-naming-convention",
1778
1892
  "@stylistic": "style",
1779
1893
  "@typescript-eslint": "ts",
1780
- "import-x": "import",
1894
+ "import-lite": "import",
1781
1895
  "n": "node",
1782
1896
  "yml": "yaml"
1783
1897
  };
@@ -1793,7 +1907,7 @@ const defaultPluginRenaming = {
1793
1907
  */
1794
1908
  function config(options = {}, ...userConfigs) {
1795
1909
  const isUsingReact = ReactPackages.some((i) => isPackageExists(i));
1796
- const { autoRenamePlugins = true, componentExts = [], effector: enableEffector = isPackageExists("effector"), fsd: enableFsd = false, gitignore: enableGitignore = true, jsx: enableJsx = true, jsxA11y: enableJsxA11y = isUsingReact, next: enableNext = NextJsPackages.some((i) => isPackageExists(i)), pnpm: enableCatalogs = false, react: enableReact = isUsingReact, regexp: enableRegexp = true, typescript: enableTypeScript = isPackageExists("typescript"), unicorn: enableUnicorn = true, unocss: enableUnoCSS = false } = options;
1910
+ const { autoRenamePlugins = true, componentExts = [], effector: enableEffector = isPackageExists("effector"), gitignore: enableGitignore = true, imports: enableImports = true, jsx: enableJsx = true, jsxA11y: enableJsxA11y = isUsingReact, next: enableNext = NextJsPackages.some((i) => isPackageExists(i)), pnpm: enableCatalogs = false, react: enableReact = isUsingReact, regexp: enableRegexp = true, typescript: enableTypeScript = isPackageExists("typescript"), unicorn: enableUnicorn = true, unocss: enableUnoCSS = false, vue: enableVue = VuePackages.some((i) => isPackageExists(i)) } = options;
1797
1911
  let isInEditor = options.isInEditor;
1798
1912
  if (isInEditor == null) {
1799
1913
  isInEditor = isInEditorEnv();
@@ -1816,7 +1930,12 @@ function config(options = {}, ...userConfigs) {
1816
1930
  isInEditor,
1817
1931
  overrides: getOverrides(options, "javascript")
1818
1932
  }), comments(), node(), imports({ stylistic: stylisticOptions }), perfectionist());
1933
+ if (enableImports) configs$1.push(imports(enableImports === true ? { stylistic: stylisticOptions } : {
1934
+ stylistic: stylisticOptions,
1935
+ ...enableImports
1936
+ }));
1819
1937
  if (enableUnicorn) configs$1.push(unicorn(enableUnicorn === true ? {} : enableUnicorn));
1938
+ if (enableVue) componentExts.push("vue");
1820
1939
  if (enableJsx) configs$1.push(jsx());
1821
1940
  if (enableTypeScript) configs$1.push(typescript({
1822
1941
  ...typescriptOptions,
@@ -1829,6 +1948,12 @@ function config(options = {}, ...userConfigs) {
1829
1948
  overrides: getOverrides(options, "stylistic")
1830
1949
  }));
1831
1950
  if (enableRegexp) configs$1.push(regexp(typeof enableRegexp === "boolean" ? {} : enableRegexp));
1951
+ if (enableVue) configs$1.push(vue({
1952
+ ...resolveSubOptions(options, "vue"),
1953
+ overrides: getOverrides(options, "vue"),
1954
+ stylistic: stylisticOptions,
1955
+ typescript: !!enableTypeScript
1956
+ }));
1832
1957
  if (enableReact) configs$1.push(react({
1833
1958
  ...typescriptOptions,
1834
1959
  overrides: getOverrides(options, "react"),
@@ -1836,7 +1961,6 @@ function config(options = {}, ...userConfigs) {
1836
1961
  }));
1837
1962
  if (enableJsxA11y) configs$1.push(jsxA11y({ overrides: getOverrides(options, "jsxA11y") }));
1838
1963
  if (enableNext) configs$1.push(next({ overrides: getOverrides(options, "next") }));
1839
- if (enableFsd) configs$1.push(fsd({ ...resolveSubOptions(options, "fsd") }));
1840
1964
  if (enableEffector) configs$1.push(effector({
1841
1965
  ...resolveSubOptions(options, "effector"),
1842
1966
  overrides: getOverrides(options, "effector")
@@ -1882,4 +2006,4 @@ function config(options = {}, ...userConfigs) {
1882
2006
  var src_default = config;
1883
2007
 
1884
2008
  //#endregion
1885
- export { GLOB_ALL_SRC, GLOB_CSS, GLOB_EXCLUDE, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_POSTCSS, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_SVG, GLOB_TOML, GLOB_TS, GLOB_TSX, GLOB_XML, GLOB_YAML, StylisticConfigDefaults, combine, comments, config, src_default as default, defaultPluginRenaming, disables, effector, ensurePackages, formatters, fsd, getOverrides, ignores, imports, interopDefault, isInEditorEnv, isInGitHooksOrLintStaged, isPackageInScope, javascript, jsonc, jsx, jsxA11y, markdown, next, node, parserPlain, perfectionist, pnpm, react, regexp, renameRules, resolveSubOptions, sortPackageJson, sortTsconfig, stylistic, toml, typescript, unicorn, unocss, yaml };
2009
+ export { GLOB_ALL_SRC, GLOB_CSS, GLOB_EXCLUDE, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_POSTCSS, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_SVG, GLOB_TOML, GLOB_TS, GLOB_TSX, GLOB_VUE, GLOB_XML, GLOB_YAML, StylisticConfigDefaults, combine, comments, config, src_default as default, defaultPluginRenaming, disables, effector, ensurePackages, formatters, getOverrides, ignores, imports, interopDefault, isInEditorEnv, isInGitHooksOrLintStaged, isPackageInScope, javascript, jsonc, jsx, jsxA11y, markdown, next, node, parserPlain, perfectionist, pnpm, react, regexp, renameRules, resolveSubOptions, sortPackageJson, sortTsconfig, stylistic, toml, typescript, unicorn, unocss, vue, yaml };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ghettoddos/eslint-config",
3
3
  "type": "module",
4
- "version": "1.6.2",
4
+ "version": "1.7.0",
5
5
  "description": "ghettoDdOS ESLint config",
6
6
  "author": "ghettoDdOS <pen.egor2002@gamil.com> (https://github.com/ghettoDdOS/)",
7
7
  "license": "MIT",
@@ -25,14 +25,14 @@
25
25
  "dist"
26
26
  ],
27
27
  "peerDependencies": {
28
- "@next/eslint-plugin-next": "^15.3.2",
29
- "@prettier/plugin-xml": "^3.4.1",
28
+ "@next/eslint-plugin-next": "^15.4.3",
29
+ "@prettier/plugin-xml": "^3.4.2",
30
30
  "@unocss/eslint-plugin": ">=0.50.0",
31
31
  "eslint": "^9.10.0",
32
- "eslint-plugin-boundaries": "^5.0.1",
33
32
  "eslint-plugin-effector": "^0.15.0",
34
33
  "eslint-plugin-format": ">=0.1.0",
35
- "eslint-plugin-jsx-a11y": "^6.10.2"
34
+ "eslint-plugin-jsx-a11y": "^6.10.2",
35
+ "eslint-plugin-vuejs-accessibility": "^2.4.1"
36
36
  },
37
37
  "peerDependenciesMeta": {
38
38
  "@next/eslint-plugin-next": {
@@ -44,9 +44,6 @@
44
44
  "@unocss/eslint-plugin": {
45
45
  "optional": true
46
46
  },
47
- "eslint-plugin-boundaries": {
48
- "optional": true
49
- },
50
47
  "eslint-plugin-effector": {
51
48
  "optional": true
52
49
  },
@@ -55,58 +52,65 @@
55
52
  },
56
53
  "eslint-plugin-jsx-a11y": {
57
54
  "optional": true
55
+ },
56
+ "eslint-plugin-vuejs-accessibility": {
57
+ "optional": true
58
58
  }
59
59
  },
60
60
  "dependencies": {
61
61
  "@antfu/install-pkg": "^1.1.0",
62
62
  "@clack/prompts": "^0.11.0",
63
63
  "@eslint-community/eslint-plugin-eslint-comments": "^4.5.0",
64
- "@eslint-react/eslint-plugin": "^1.50.0",
65
- "@eslint/compat": "^1.2.9",
66
- "@eslint/markdown": "^6.4.0",
67
- "@stylistic/eslint-plugin": "^4.4.0",
68
- "@typescript-eslint/eslint-plugin": "^8.33.0",
69
- "@typescript-eslint/parser": "^8.33.0",
64
+ "@eslint-react/eslint-plugin": "^1.52.3",
65
+ "@eslint/compat": "^1.3.1",
66
+ "@eslint/markdown": "^7.1.0",
67
+ "@stylistic/eslint-plugin": "^5.2.2",
68
+ "@typescript-eslint/eslint-plugin": "^8.38.0",
69
+ "@typescript-eslint/parser": "^8.38.0",
70
70
  "eslint-config-flat-gitignore": "^2.1.0",
71
71
  "eslint-flat-config-utils": "^2.1.0",
72
72
  "eslint-merge-processors": "^2.0.0",
73
73
  "eslint-plugin-antfu": "^3.1.1",
74
- "eslint-plugin-import-x": "^4.13.3",
74
+ "eslint-plugin-import-lite": "^0.3.0",
75
+ "eslint-plugin-import-x": "^4.16.1",
75
76
  "eslint-plugin-jsonc": "^2.20.1",
76
- "eslint-plugin-n": "^17.18.0",
77
- "eslint-plugin-perfectionist": "^4.13.0",
78
- "eslint-plugin-pnpm": "^0.3.1",
77
+ "eslint-plugin-n": "^17.21.0",
78
+ "eslint-plugin-perfectionist": "^4.15.0",
79
+ "eslint-plugin-pnpm": "^1.1.0",
79
80
  "eslint-plugin-react-hooks": "^5.2.0",
80
81
  "eslint-plugin-react-refresh": "^0.4.20",
81
- "eslint-plugin-regexp": "^2.7.0",
82
+ "eslint-plugin-regexp": "^2.9.0",
82
83
  "eslint-plugin-toml": "^0.12.0",
83
- "eslint-plugin-unicorn": "^59.0.1",
84
+ "eslint-plugin-unicorn": "^60.0.0",
84
85
  "eslint-plugin-unused-imports": "^4.1.4",
86
+ "eslint-plugin-vue": "^10.3.0",
85
87
  "eslint-plugin-yml": "^1.18.0",
86
- "globals": "^16.2.0",
88
+ "eslint-processor-vue-blocks": "^2.0.0",
89
+ "globals": "^16.3.0",
87
90
  "jsonc-eslint-parser": "^2.4.0",
88
91
  "local-pkg": "^1.1.1",
89
92
  "parse-gitignore": "^2.0.0",
90
93
  "toml-eslint-parser": "^0.10.0",
94
+ "vue-eslint-parser": "^10.2.0",
91
95
  "yaml-eslint-parser": "^1.3.0"
92
96
  },
93
97
  "devDependencies": {
94
- "@eslint/config-inspector": "^1.0.2",
95
- "@next/eslint-plugin-next": "^15.3.2",
96
- "@prettier/plugin-xml": "^3.4.1",
97
- "@types/node": "^22.15.24",
98
- "@unocss/eslint-plugin": "66.1.0-beta.3",
99
- "bumpp": "^10.1.1",
100
- "eslint": "^9.27.0",
101
- "eslint-plugin-boundaries": "^5.0.1",
98
+ "@eslint/config-inspector": "^1.1.0",
99
+ "@next/eslint-plugin-next": "^15.4.3",
100
+ "@prettier/plugin-xml": "^3.4.2",
101
+ "@types/node": "^24.1.0",
102
+ "@unocss/eslint-plugin": "^66.3.3",
103
+ "bumpp": "^10.2.0",
104
+ "eslint": "^9.31.0",
102
105
  "eslint-plugin-effector": "^0.15.0",
103
106
  "eslint-plugin-format": "^1.0.1",
104
107
  "eslint-plugin-jsx-a11y": "^6.10.2",
105
- "eslint-typegen": "^2.2.0",
106
- "lint-staged": "^16.1.0",
108
+ "eslint-plugin-vuejs-accessibility": "^2.4.1",
109
+ "eslint-typegen": "^2.2.1",
110
+ "lint-staged": "^16.1.2",
107
111
  "simple-git-hooks": "^2.13.0",
108
- "tsdown": "^0.12.4",
109
- "tsx": "^4.19.4",
112
+ "tsdown": "^0.13.0",
113
+ "tsx": "^4.20.3",
110
114
  "typescript": "^5.8.3"
111
115
  },
112
116
  "simple-git-hooks": {