@shayanthenerd/eslint-config 0.7.0 → 0.8.1

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 (38) hide show
  1. package/README.md +3 -0
  2. package/dist/configs/base.js +1 -1
  3. package/dist/configs/css.js +0 -2
  4. package/dist/configs/oxlintOverrides.js +1 -2
  5. package/dist/configs/restrictedExports.js +1 -2
  6. package/dist/configs/typescript.js +2 -2
  7. package/dist/configs/vue.js +1 -1
  8. package/dist/configs/vueComponentNames.js +1 -2
  9. package/dist/configs/vueServerComponents.js +1 -2
  10. package/dist/index.js +2 -4
  11. package/dist/oxlint.config.jsonc +7 -1
  12. package/dist/prettier.config.js +1 -1
  13. package/dist/rules/css.js +1 -2
  14. package/dist/rules/cypress.js +1 -2
  15. package/dist/rules/html.js +1 -2
  16. package/dist/rules/importX.js +1 -2
  17. package/dist/rules/javascript.js +3 -2
  18. package/dist/rules/perfectionist.js +3 -3
  19. package/dist/rules/playwright.js +1 -2
  20. package/dist/rules/storybook.js +1 -2
  21. package/dist/rules/stylistic.js +1 -2
  22. package/dist/rules/tailwind.js +1 -2
  23. package/dist/rules/typescript.js +2 -2
  24. package/dist/rules/vitest.js +1 -2
  25. package/dist/rules/vue.js +14 -10
  26. package/dist/rules/vueAccessibility.js +17 -3
  27. package/dist/types/configOptions/nuxt.d.ts +27 -1
  28. package/dist/types/configOptions/typescript.d.ts +3 -1
  29. package/dist/types/eslint-schema.d.ts +143 -39
  30. package/dist/utils/globs.js +10 -11
  31. package/dist/utils/ignores/getIgnorePatterns.js +1 -2
  32. package/dist/utils/ignores/resolveGitignorePatterns.js +2 -3
  33. package/dist/utils/options/defaultOptions.js +1 -0
  34. package/dist/utils/options/enableDetectedConfigs.js +1 -0
  35. package/dist/utils/options/mergeWithDefaults.js +4 -8
  36. package/dist/utils/vue/getRestrictedVueElements.js +2 -3
  37. package/dist/utils/vue/getRestrictedVueInputs.js +2 -3
  38. package/package.json +41 -42
@@ -13,46 +13,46 @@ declare module 'eslint-flat-config-utils' {
13
13
  interface DefaultConfigNamesMap {
14
14
  'shayanthenerd/global'?: true;
15
15
  'shayanthenerd/ignores'?: true;
16
- 'shayanthenerd/base'?: true;
16
+ 'shayanthenerd/base > ExtendedConfig[0]'?: true;
17
17
  'shayanthenerd/base'?: true;
18
18
  'shayanthenerd/restricted-exports'?: true;
19
- 'shayanthenerd/import-x__import-x/recommended'?: true;
20
- 'shayanthenerd/import-x__import-x/typescript'?: true;
19
+ 'shayanthenerd/import-x > import-x/recommended'?: true;
20
+ 'shayanthenerd/import-x > import-x/typescript'?: true;
21
21
  'shayanthenerd/import-x'?: true;
22
- 'shayanthenerd/stylistic'?: true;
22
+ 'shayanthenerd/stylistic > ExtendedConfig[0]'?: true;
23
23
  'shayanthenerd/stylistic'?: true;
24
24
  'shayanthenerd/perfectionist'?: true;
25
- 'shayanthenerd/typescript__typescript-eslint/base'?: true;
26
- 'shayanthenerd/typescript__typescript-eslint/eslint-recommended'?: true;
27
- 'shayanthenerd/typescript__typescript-eslint/strict-type-checked'?: true;
28
- 'shayanthenerd/typescript__typescript-eslint/base'?: true;
29
- 'shayanthenerd/typescript__typescript-eslint/eslint-recommended'?: true;
30
- 'shayanthenerd/typescript__typescript-eslint/stylistic-type-checked'?: true;
25
+ 'shayanthenerd/typescript > typescript-eslint/base'?: true;
26
+ 'shayanthenerd/typescript > typescript-eslint/eslint-recommended'?: true;
27
+ 'shayanthenerd/typescript > typescript-eslint/strict-type-checked'?: true;
28
+ 'shayanthenerd/typescript > typescript-eslint/base'?: true;
29
+ 'shayanthenerd/typescript > typescript-eslint/eslint-recommended'?: true;
30
+ 'shayanthenerd/typescript > typescript-eslint/stylistic-type-checked'?: true;
31
31
  'shayanthenerd/typescript'?: true;
32
+ 'shayanthenerd/html > ExtendedConfig[0]'?: true;
32
33
  'shayanthenerd/html'?: true;
33
- 'shayanthenerd/html'?: true;
34
- 'shayanthenerd/css'?: true;
34
+ 'shayanthenerd/css > ExtendedConfig[0]'?: true;
35
35
  'shayanthenerd/css'?: true;
36
36
  'shayanthenerd/tailwind'?: true;
37
- 'shayanthenerd/vue__vue/base/setup'?: true;
38
- 'shayanthenerd/vue__vue/base/setup-for-vue'?: true;
39
- 'shayanthenerd/vue__vue/essential/rules'?: true;
40
- 'shayanthenerd/vue__vue/strongly-recommended/rules'?: true;
41
- 'shayanthenerd/vue__vue/recommended/rules'?: true;
42
- 'shayanthenerd/vue__vuejs-accessibility:setup:base'?: true;
43
- 'shayanthenerd/vue__vuejs-accessibility:setup:with-files-rules-and-parser'?: true;
37
+ 'shayanthenerd/vue > vue/base/setup'?: true;
38
+ 'shayanthenerd/vue > vue/base/setup-for-vue'?: true;
39
+ 'shayanthenerd/vue > vue/essential/rules'?: true;
40
+ 'shayanthenerd/vue > vue/strongly-recommended/rules'?: true;
41
+ 'shayanthenerd/vue > vue/recommended/rules'?: true;
42
+ 'shayanthenerd/vue > vuejs-accessibility:setup:base'?: true;
43
+ 'shayanthenerd/vue > vuejs-accessibility:setup:with-files-rules-and-parser'?: true;
44
44
  'shayanthenerd/vue'?: true;
45
45
  'shayanthenerd/vue/multi-word-component-names'?: true;
46
46
  'shayanthenerd/vue/server-components'?: true;
47
- 'shayanthenerd/storybook__storybook:recommended:setup'?: true;
48
- 'shayanthenerd/storybook__storybook:recommended:stories-rules'?: true;
49
- 'shayanthenerd/storybook__storybook:recommended:main-rules'?: true;
47
+ 'shayanthenerd/storybook > storybook:recommended:setup'?: true;
48
+ 'shayanthenerd/storybook > storybook:recommended:stories-rules'?: true;
49
+ 'shayanthenerd/storybook > storybook:recommended:main-rules'?: true;
50
50
  'shayanthenerd/storybook'?: true;
51
- 'shayanthenerd/vitest__vitest/recommended'?: true;
51
+ 'shayanthenerd/vitest > vitest/recommended'?: true;
52
52
  'shayanthenerd/vitest'?: true;
53
+ 'shayanthenerd/playwright > ExtendedConfig[0]'?: true;
53
54
  'shayanthenerd/playwright'?: true;
54
- 'shayanthenerd/playwright'?: true;
55
- 'shayanthenerd/cypress__cypress/recommended'?: true;
55
+ 'shayanthenerd/cypress > cypress/recommended'?: true;
56
56
  'shayanthenerd/cypress'?: true;
57
57
  'oxlint/from-oxlint-config'?: true;
58
58
  'oxlint/vue-svelte-exceptions'?: true;
@@ -209,6 +209,11 @@ interface ESLintSchema {
209
209
  * @see https://html-eslint.org/docs/rules/no-restricted-attrs
210
210
  */
211
211
  '@html-eslint/no-restricted-attrs'?: Linter.RuleEntry<HtmlEslintNoRestrictedAttrs>;
212
+ /**
213
+ * Disallow specified tags
214
+ * @see https://html-eslint.org/docs/rules/no-restricted-tags
215
+ */
216
+ '@html-eslint/no-restricted-tags'?: Linter.RuleEntry<HtmlEslintNoRestrictedTags>;
212
217
  /**
213
218
  * Enforce to omit type attributes for style sheets and scripts
214
219
  * @see https://html-eslint.org/docs/rules/no-script-style-type
@@ -511,8 +516,9 @@ interface ESLintSchema {
511
516
  */
512
517
  '@stylistic/jsx-pascal-case'?: Linter.RuleEntry<StylisticJsxPascalCase>;
513
518
  /**
514
- * Disallow multiple spaces between inline JSX props
519
+ * Disallow multiple spaces between inline JSX props. Deprecated, use `no-multi-spaces` rule instead.
515
520
  * @see https://eslint.style/rules/jsx-props-no-multi-spaces
521
+ * @deprecated
516
522
  */
517
523
  '@stylistic/jsx-props-no-multi-spaces'?: Linter.RuleEntry<[]>;
518
524
  /**
@@ -1227,7 +1233,7 @@ interface ESLintSchema {
1227
1233
  * Disallow member access on a value with type `any`
1228
1234
  * @see https://typescript-eslint.io/rules/no-unsafe-member-access
1229
1235
  */
1230
- '@typescript-eslint/no-unsafe-member-access'?: Linter.RuleEntry<[]>;
1236
+ '@typescript-eslint/no-unsafe-member-access'?: Linter.RuleEntry<TypescriptEslintNoUnsafeMemberAccess>;
1231
1237
  /**
1232
1238
  * Disallow returning a value with type `any` from a function
1233
1239
  * @see https://typescript-eslint.io/rules/no-unsafe-return
@@ -3614,6 +3620,11 @@ interface ESLintSchema {
3614
3620
  * @see https://eslint.org/docs/latest/rules/prefer-template
3615
3621
  */
3616
3622
  'prefer-template'?: Linter.RuleEntry<[]>;
3623
+ /**
3624
+ * Disallow losing originally caught error when re-throwing custom errors
3625
+ * @see https://eslint.org/docs/latest/rules/preserve-caught-error
3626
+ */
3627
+ 'preserve-caught-error'?: Linter.RuleEntry<PreserveCaughtError>;
3617
3628
  /**
3618
3629
  * Require quotes around object literal property names
3619
3630
  * @see https://eslint.org/docs/latest/rules/quote-props
@@ -3884,6 +3895,11 @@ interface ESLintSchema {
3884
3895
  * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/expect-expect.md
3885
3896
  */
3886
3897
  'vitest/expect-expect'?: Linter.RuleEntry<VitestExpectExpect>;
3898
+ /**
3899
+ * enforce hoisted APIs to be on top of the file
3900
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/hoisted-apis-on-top.md
3901
+ */
3902
+ 'vitest/hoisted-apis-on-top'?: Linter.RuleEntry<[]>;
3887
3903
  /**
3888
3904
  * enforce a maximum number of expect per test
3889
3905
  * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/max-expects.md
@@ -4040,6 +4056,11 @@ interface ESLintSchema {
4040
4056
  * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-test-blocks.md
4041
4057
  */
4042
4058
  'vitest/padding-around-test-blocks'?: Linter.RuleEntry<[]>;
4059
+ /**
4060
+ * Prefer `toHaveBeenCalledExactlyOnceWith` over `toHaveBeenCalledOnce` and `toHaveBeenCalledWith`
4061
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-called-exactly-once-with.md
4062
+ */
4063
+ 'vitest/prefer-called-exactly-once-with'?: Linter.RuleEntry<[]>;
4043
4064
  /**
4044
4065
  * enforce using `toBeCalledOnce()` or `toHaveBeenCalledOnce()`
4045
4066
  * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-called-once.md
@@ -4085,6 +4106,11 @@ interface ESLintSchema {
4085
4106
  * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-expect-resolves.md
4086
4107
  */
4087
4108
  'vitest/prefer-expect-resolves'?: Linter.RuleEntry<[]>;
4109
+ /**
4110
+ * enforce using `expectTypeOf` instead of `expect(typeof ...)`
4111
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-expect-type-of.md
4112
+ */
4113
+ 'vitest/prefer-expect-type-of'?: Linter.RuleEntry<[]>;
4088
4114
  /**
4089
4115
  * enforce having hooks in consistent order
4090
4116
  * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-hooks-in-order.md
@@ -4095,6 +4121,11 @@ interface ESLintSchema {
4095
4121
  * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-hooks-on-top.md
4096
4122
  */
4097
4123
  'vitest/prefer-hooks-on-top'?: Linter.RuleEntry<[]>;
4124
+ /**
4125
+ * prefer dynamic import in mock
4126
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-import-in-mock.md
4127
+ */
4128
+ 'vitest/prefer-import-in-mock'?: Linter.RuleEntry<[]>;
4098
4129
  /**
4099
4130
  * enforce importing Vitest globals
4100
4131
  * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-importing-vitest-globals.md
@@ -4514,7 +4545,7 @@ interface ESLintSchema {
4514
4545
  * disallow asynchronous actions in computed properties
4515
4546
  * @see https://eslint.vuejs.org/rules/no-async-in-computed-properties.html
4516
4547
  */
4517
- 'vue/no-async-in-computed-properties'?: Linter.RuleEntry<[]>;
4548
+ 'vue/no-async-in-computed-properties'?: Linter.RuleEntry<VueNoAsyncInComputedProperties>;
4518
4549
  /**
4519
4550
  * disallow the use of bare strings in `<template>`
4520
4551
  * @see https://eslint.vuejs.org/rules/no-bare-strings-in-template.html
@@ -5015,7 +5046,7 @@ interface ESLintSchema {
5015
5046
  * disallow use of v-html to prevent XSS attack
5016
5047
  * @see https://eslint.vuejs.org/rules/no-v-html.html
5017
5048
  */
5018
- 'vue/no-v-html'?: Linter.RuleEntry<[]>;
5049
+ 'vue/no-v-html'?: Linter.RuleEntry<VueNoVHtml>;
5019
5050
  /**
5020
5051
  * disallow adding an argument to `v-model` used in custom component
5021
5052
  * @see https://eslint.vuejs.org/rules/no-v-model-argument.html
@@ -5576,7 +5607,6 @@ interface ESLintSchema {
5576
5607
  */
5577
5608
  'yoda'?: Linter.RuleEntry<Yoda>;
5578
5609
  }
5579
-
5580
5610
  /* ======= Declarations ======= */
5581
5611
  // ----- @html-eslint/attrs-newline -----
5582
5612
  type HtmlEslintAttrsNewline = [] | [{
@@ -5631,6 +5661,11 @@ type HtmlEslintNoRestrictedAttrs = {
5631
5661
  attrPatterns: string[];
5632
5662
  message?: string;
5633
5663
  }[];
5664
+ // ----- @html-eslint/no-restricted-tags -----
5665
+ type HtmlEslintNoRestrictedTags = {
5666
+ tagPatterns: string[];
5667
+ message?: string;
5668
+ }[];
5634
5669
  // ----- @html-eslint/quotes -----
5635
5670
  type HtmlEslintQuotes = [] | [("single" | "double")] | [("single" | "double"), {
5636
5671
  enforceTemplatedAttrValue?: boolean;
@@ -5879,6 +5914,10 @@ type StylisticGeneratorStarSpacing = [] | [(("before" | "after" | "both" | "neit
5879
5914
  before?: boolean;
5880
5915
  after?: boolean;
5881
5916
  });
5917
+ shorthand?: (("before" | "after" | "both" | "neither") | {
5918
+ before?: boolean;
5919
+ after?: boolean;
5920
+ });
5882
5921
  })];
5883
5922
  // ----- @stylistic/implicit-arrow-linebreak -----
5884
5923
  type StylisticImplicitArrowLinebreak = [] | [("beside" | "below")];
@@ -5891,6 +5930,7 @@ type StylisticIndent = [] | [("tab" | number)] | [("tab" | number), {
5891
5930
  const?: (number | ("first" | "off"));
5892
5931
  using?: (number | ("first" | "off"));
5893
5932
  });
5933
+ assignmentOperator?: (number | "off");
5894
5934
  outerIIFEBody?: (number | "off");
5895
5935
  MemberExpression?: (number | "off");
5896
5936
  FunctionDeclaration?: {
@@ -6355,7 +6395,7 @@ type StylisticKeywordSpacing = [] | [{
6355
6395
  before?: boolean;
6356
6396
  after?: boolean;
6357
6397
  };
6358
- accessor?: {
6398
+ arguments?: {
6359
6399
  before?: boolean;
6360
6400
  after?: boolean;
6361
6401
  };
@@ -6371,6 +6411,10 @@ type StylisticKeywordSpacing = [] | [{
6371
6411
  before?: boolean;
6372
6412
  after?: boolean;
6373
6413
  };
6414
+ eval?: {
6415
+ before?: boolean;
6416
+ after?: boolean;
6417
+ };
6374
6418
  from?: {
6375
6419
  before?: boolean;
6376
6420
  after?: boolean;
@@ -6387,11 +6431,11 @@ type StylisticKeywordSpacing = [] | [{
6387
6431
  before?: boolean;
6388
6432
  after?: boolean;
6389
6433
  };
6390
- satisfies?: {
6434
+ set?: {
6391
6435
  before?: boolean;
6392
6436
  after?: boolean;
6393
6437
  };
6394
- set?: {
6438
+ type?: {
6395
6439
  before?: boolean;
6396
6440
  after?: boolean;
6397
6441
  };
@@ -6403,7 +6447,11 @@ type StylisticKeywordSpacing = [] | [{
6403
6447
  before?: boolean;
6404
6448
  after?: boolean;
6405
6449
  };
6406
- type?: {
6450
+ accessor?: {
6451
+ before?: boolean;
6452
+ after?: boolean;
6453
+ };
6454
+ satisfies?: {
6407
6455
  before?: boolean;
6408
6456
  after?: boolean;
6409
6457
  };
@@ -6606,6 +6654,7 @@ type StylisticNoExtraParens = ([] | ["functions"] | [] | ["all"] | ["all", {
6606
6654
  LogicalExpression?: boolean;
6607
6655
  AwaitExpression?: boolean;
6608
6656
  };
6657
+ ignoredNodes?: string[];
6609
6658
  }]);
6610
6659
  // ----- @stylistic/no-mixed-operators -----
6611
6660
  type StylisticNoMixedOperators = [] | [{
@@ -6693,6 +6742,18 @@ type StylisticObjectCurlyNewline = [] | [((("always" | "never") | {
6693
6742
  type StylisticObjectCurlySpacing = [] | [("always" | "never")] | [("always" | "never"), {
6694
6743
  arraysInObjects?: boolean;
6695
6744
  objectsInObjects?: boolean;
6745
+ overrides?: {
6746
+ ObjectPattern?: ("always" | "never");
6747
+ ObjectExpression?: ("always" | "never");
6748
+ ImportDeclaration?: ("always" | "never");
6749
+ ImportAttributes?: ("always" | "never");
6750
+ ExportNamedDeclaration?: ("always" | "never");
6751
+ ExportAllDeclaration?: ("always" | "never");
6752
+ TSMappedType?: ("always" | "never");
6753
+ TSTypeLiteral?: ("always" | "never");
6754
+ TSInterfaceBody?: ("always" | "never");
6755
+ TSEnumBody?: ("always" | "never");
6756
+ };
6696
6757
  }];
6697
6758
  // ----- @stylistic/object-property-newline -----
6698
6759
  type StylisticObjectPropertyNewline = [] | [{
@@ -6721,7 +6782,7 @@ type StylisticPaddedBlocks = [] | [(("always" | "never" | "start" | "end") | {
6721
6782
  // ----- @stylistic/padding-line-between-statements -----
6722
6783
  type _StylisticPaddingLineBetweenStatementsPaddingType = ("any" | "never" | "always");
6723
6784
  type _StylisticPaddingLineBetweenStatementsStatementOption = (_StylisticPaddingLineBetweenStatementsStatementType | [_StylisticPaddingLineBetweenStatementsStatementType, ...(_StylisticPaddingLineBetweenStatementsStatementType)[]]);
6724
- type _StylisticPaddingLineBetweenStatementsStatementType = ("*" | "exports" | "require" | "directive" | "iife" | "block" | "empty" | "function" | "ts-method" | "break" | "case" | "class" | "continue" | "debugger" | "default" | "do" | "for" | "if" | "import" | "return" | "switch" | "throw" | "try" | "while" | "with" | "cjs-export" | "cjs-import" | "enum" | "interface" | "type" | "function-overload" | "block-like" | "singleline-block-like" | "multiline-block-like" | "expression" | "singleline-expression" | "multiline-expression" | "export" | "singleline-export" | "multiline-export" | "var" | "singleline-var" | "multiline-var" | "let" | "singleline-let" | "multiline-let" | "const" | "singleline-const" | "multiline-const" | "using" | "singleline-using" | "multiline-using");
6785
+ type _StylisticPaddingLineBetweenStatementsStatementType = ("*" | "exports" | "require" | "directive" | "iife" | "block" | "empty" | "function" | "ts-method" | "break" | "case" | "class" | "continue" | "debugger" | "default" | "do" | "for" | "if" | "import" | "switch" | "throw" | "try" | "while" | "with" | "cjs-export" | "cjs-import" | "enum" | "interface" | "function-overload" | "block-like" | "singleline-block-like" | "multiline-block-like" | "expression" | "singleline-expression" | "multiline-expression" | "return" | "singleline-return" | "multiline-return" | "export" | "singleline-export" | "multiline-export" | "var" | "singleline-var" | "multiline-var" | "let" | "singleline-let" | "multiline-let" | "const" | "singleline-const" | "multiline-const" | "using" | "singleline-using" | "multiline-using" | "type" | "singleline-type" | "multiline-type");
6725
6786
  type StylisticPaddingLineBetweenStatements = {
6726
6787
  blankLine: _StylisticPaddingLineBetweenStatementsPaddingType;
6727
6788
  prev: _StylisticPaddingLineBetweenStatementsStatementOption;
@@ -7532,6 +7593,10 @@ type TypescriptEslintNoUnnecessaryTypeAssertion = [] | [{
7532
7593
  checkLiteralConstAssertions?: boolean;
7533
7594
  typesToIgnore?: string[];
7534
7595
  }];
7596
+ // ----- @typescript-eslint/no-unsafe-member-access -----
7597
+ type TypescriptEslintNoUnsafeMemberAccess = [] | [{
7598
+ allowOptionalChaining?: boolean;
7599
+ }];
7535
7600
  // ----- @typescript-eslint/no-unused-expressions -----
7536
7601
  type TypescriptEslintNoUnusedExpressions = [] | [{
7537
7602
  allowShortCircuit?: boolean;
@@ -7549,6 +7614,7 @@ type TypescriptEslintNoUnusedVars = [] | [(("all" | "local") | {
7549
7614
  destructuredArrayIgnorePattern?: string;
7550
7615
  ignoreClassWithStaticInitBlock?: boolean;
7551
7616
  ignoreRestSiblings?: boolean;
7617
+ ignoreUsingDeclarations?: boolean;
7552
7618
  reportUsedIgnorePattern?: boolean;
7553
7619
  vars?: ("all" | "local");
7554
7620
  varsIgnorePattern?: string;
@@ -9648,12 +9714,14 @@ type NoRestrictedImports = ((string | {
9648
9714
  message?: string;
9649
9715
  importNames?: string[];
9650
9716
  allowImportNames?: string[];
9717
+ allowTypeImports?: boolean;
9651
9718
  })[] | [] | [{
9652
9719
  paths?: (string | {
9653
9720
  name: string;
9654
9721
  message?: string;
9655
9722
  importNames?: string[];
9656
9723
  allowImportNames?: string[];
9724
+ allowTypeImports?: boolean;
9657
9725
  })[];
9658
9726
  patterns?: (string[] | ({
9659
9727
  [k: string]: unknown | undefined;
@@ -11747,6 +11815,10 @@ type PreferReflect = [] | [{
11747
11815
  type PreferRegexLiterals = [] | [{
11748
11816
  disallowRedundantWrapping?: boolean;
11749
11817
  }];
11818
+ // ----- preserve-caught-error -----
11819
+ type PreserveCaughtError = [] | [{
11820
+ requireCatchParameter?: boolean;
11821
+ }];
11750
11822
  // ----- quote-props -----
11751
11823
  type QuoteProps = ([] | [("always" | "as-needed" | "consistent" | "consistent-as-needed")] | [] | [("always" | "as-needed" | "consistent" | "consistent-as-needed")] | [("always" | "as-needed" | "consistent" | "consistent-as-needed"), {
11752
11824
  keywords?: boolean;
@@ -11878,6 +11950,7 @@ type UnusedImportsNoUnusedImports = [] | [(("all" | "local") | {
11878
11950
  destructuredArrayIgnorePattern?: string;
11879
11951
  ignoreClassWithStaticInitBlock?: boolean;
11880
11952
  ignoreRestSiblings?: boolean;
11953
+ ignoreUsingDeclarations?: boolean;
11881
11954
  reportUsedIgnorePattern?: boolean;
11882
11955
  vars?: ("all" | "local");
11883
11956
  varsIgnorePattern?: string;
@@ -11891,6 +11964,7 @@ type UnusedImportsNoUnusedVars = [] | [(("all" | "local") | {
11891
11964
  destructuredArrayIgnorePattern?: string;
11892
11965
  ignoreClassWithStaticInitBlock?: boolean;
11893
11966
  ignoreRestSiblings?: boolean;
11967
+ ignoreUsingDeclarations?: boolean;
11894
11968
  reportUsedIgnorePattern?: boolean;
11895
11969
  vars?: ("all" | "local");
11896
11970
  varsIgnorePattern?: string;
@@ -12041,6 +12115,7 @@ type VueAttributeHyphenation = [] | [("always" | "never")] | [("always" | "never
12041
12115
  type VueAttributesOrder = [] | [{
12042
12116
  order?: (("DEFINITION" | "LIST_RENDERING" | "CONDITIONALS" | "RENDER_MODIFIERS" | "GLOBAL" | "UNIQUE" | "SLOT" | "TWO_WAY_BINDING" | "OTHER_DIRECTIVES" | "OTHER_ATTR" | "ATTR_STATIC" | "ATTR_DYNAMIC" | "ATTR_SHORTHAND_BOOL" | "EVENTS" | "CONTENT") | ("DEFINITION" | "LIST_RENDERING" | "CONDITIONALS" | "RENDER_MODIFIERS" | "GLOBAL" | "UNIQUE" | "SLOT" | "TWO_WAY_BINDING" | "OTHER_DIRECTIVES" | "OTHER_ATTR" | "ATTR_STATIC" | "ATTR_DYNAMIC" | "ATTR_SHORTHAND_BOOL" | "EVENTS" | "CONTENT")[])[];
12043
12117
  alphabetical?: boolean;
12118
+ sortLineLength?: boolean;
12044
12119
  }];
12045
12120
  // ----- vue/block-lang -----
12046
12121
  type VueBlockLang = [] | [{
@@ -12524,7 +12599,7 @@ type VueKeywordSpacing = [] | [{
12524
12599
  before?: boolean;
12525
12600
  after?: boolean;
12526
12601
  };
12527
- accessor?: {
12602
+ arguments?: {
12528
12603
  before?: boolean;
12529
12604
  after?: boolean;
12530
12605
  };
@@ -12540,6 +12615,10 @@ type VueKeywordSpacing = [] | [{
12540
12615
  before?: boolean;
12541
12616
  after?: boolean;
12542
12617
  };
12618
+ eval?: {
12619
+ before?: boolean;
12620
+ after?: boolean;
12621
+ };
12543
12622
  from?: {
12544
12623
  before?: boolean;
12545
12624
  after?: boolean;
@@ -12556,11 +12635,11 @@ type VueKeywordSpacing = [] | [{
12556
12635
  before?: boolean;
12557
12636
  after?: boolean;
12558
12637
  };
12559
- satisfies?: {
12638
+ set?: {
12560
12639
  before?: boolean;
12561
12640
  after?: boolean;
12562
12641
  };
12563
- set?: {
12642
+ type?: {
12564
12643
  before?: boolean;
12565
12644
  after?: boolean;
12566
12645
  };
@@ -12572,7 +12651,11 @@ type VueKeywordSpacing = [] | [{
12572
12651
  before?: boolean;
12573
12652
  after?: boolean;
12574
12653
  };
12575
- type?: {
12654
+ accessor?: {
12655
+ before?: boolean;
12656
+ after?: boolean;
12657
+ };
12658
+ satisfies?: {
12576
12659
  before?: boolean;
12577
12660
  after?: boolean;
12578
12661
  };
@@ -12715,6 +12798,10 @@ type VueNewLineBetweenMultiLineProperty = [] | [{
12715
12798
  }];
12716
12799
  // ----- vue/next-tick-style -----
12717
12800
  type VueNextTickStyle = [] | [("promise" | "callback")];
12801
+ // ----- vue/no-async-in-computed-properties -----
12802
+ type VueNoAsyncInComputedProperties = [] | [{
12803
+ ignoredObjectNames?: string[];
12804
+ }];
12718
12805
  // ----- vue/no-bare-strings-in-template -----
12719
12806
  type VueNoBareStringsInTemplate = [] | [{
12720
12807
  allowlist?: string[];
@@ -12785,6 +12872,7 @@ type VueNoExtraParens = ([] | ["functions"] | [] | ["all"] | ["all", {
12785
12872
  LogicalExpression?: boolean;
12786
12873
  AwaitExpression?: boolean;
12787
12874
  };
12875
+ ignoredNodes?: string[];
12788
12876
  }]);
12789
12877
  // ----- vue/no-implicit-coercion -----
12790
12878
  type VueNoImplicitCoercion = [] | [{
@@ -13005,6 +13093,10 @@ type VueNoUselessVBind = [] | [{
13005
13093
  ignoreIncludesComment?: boolean;
13006
13094
  ignoreStringEscape?: boolean;
13007
13095
  }];
13096
+ // ----- vue/no-v-html -----
13097
+ type VueNoVHtml = [] | [{
13098
+ ignorePattern?: string;
13099
+ }];
13008
13100
  // ----- vue/no-v-text-v-html-on-component -----
13009
13101
  type VueNoVTextVHtmlOnComponent = [] | [{
13010
13102
  allow?: string[];
@@ -13056,6 +13148,18 @@ type VueObjectCurlyNewline = [] | [((("always" | "never") | {
13056
13148
  type VueObjectCurlySpacing = [] | [("always" | "never")] | [("always" | "never"), {
13057
13149
  arraysInObjects?: boolean;
13058
13150
  objectsInObjects?: boolean;
13151
+ overrides?: {
13152
+ ObjectPattern?: ("always" | "never");
13153
+ ObjectExpression?: ("always" | "never");
13154
+ ImportDeclaration?: ("always" | "never");
13155
+ ImportAttributes?: ("always" | "never");
13156
+ ExportNamedDeclaration?: ("always" | "never");
13157
+ ExportAllDeclaration?: ("always" | "never");
13158
+ TSMappedType?: ("always" | "never");
13159
+ TSTypeLiteral?: ("always" | "never");
13160
+ TSInterfaceBody?: ("always" | "never");
13161
+ TSEnumBody?: ("always" | "never");
13162
+ };
13059
13163
  }];
13060
13164
  // ----- vue/object-property-newline -----
13061
13165
  type VueObjectPropertyNewline = [] | [{
@@ -1,22 +1,21 @@
1
1
  //#region src/utils/globs.ts
2
2
  const srcExtensions = "?([mc])[jt]s?(x)";
3
3
  const vueExtensions = `{vue,${srcExtensions}}`;
4
- const restrictedExportsFolders = [
5
- "shared",
6
- "dto?(s)",
7
- "model?(s)",
8
- "helper?(s)",
9
- "module?(s)",
10
- "util?(s|ities)",
11
- "composable?(s)",
12
- "repo?(s|sitory|sitories)"
13
- ];
14
4
  const globs = {
15
5
  css: "**/*.css",
16
6
  html: "**/*.html",
17
7
  ts: "**/*.?([mc])ts?(x)",
18
8
  src: `**/*.${srcExtensions}`,
19
- restrictedExports: `**/{${restrictedExportsFolders.join(",")}}/**/*.${srcExtensions}`,
9
+ restrictedExports: `**/{${[
10
+ "shared",
11
+ "dto?(s)",
12
+ "model?(s)",
13
+ "helper?(s)",
14
+ "module?(s)",
15
+ "util?(s|ities)",
16
+ "composable?(s)",
17
+ "repo?(s|sitory|sitories)"
18
+ ].join(",")}}/**/*.${srcExtensions}`,
20
19
  vue: `**/*.${vueExtensions}`,
21
20
  vueServerComponents: `**/*.server.${vueExtensions}`,
22
21
  vueAppErrorLayoutsPages: `**/{{app,error},{layouts,pages}/**/*}.${vueExtensions}`,
@@ -8,8 +8,7 @@ function getIgnorePatterns({ patterns, gitignore }) {
8
8
  if (gitignorePatterns.length > 0) defaultIgnorePatterns.push(...gitignorePatterns);
9
9
  }
10
10
  if (patterns.length > 0) defaultIgnorePatterns.push(...patterns);
11
- const uniqueIgnorePatterns = [...new Set(defaultIgnorePatterns)];
12
- return uniqueIgnorePatterns;
11
+ return [...new Set(defaultIgnorePatterns)];
13
12
  }
14
13
 
15
14
  //#endregion
@@ -1,12 +1,11 @@
1
1
  import path from "node:path";
2
- import { styleText } from "node:util";
3
2
  import { includeIgnoreFile } from "@eslint/compat";
4
3
  import fs from "node:fs";
4
+ import { styleText } from "node:util";
5
5
 
6
6
  //#region src/utils/ignores/resolveGitignorePatterns.ts
7
7
  const warningMessage = styleText("yellow", "⚠ Warning:");
8
- const gitignoreDisableFlag = styleText("bgBlack", " gitignore: false ");
9
- const fallbackMessage = `Falling back to default ignore patterns. You can suppress this warning by setting ${gitignoreDisableFlag} in the config.`;
8
+ const fallbackMessage = `Falling back to default ignore patterns. You can suppress this warning by setting ${styleText("bgBlack", " gitignore: false ")} in the config.`;
10
9
  function resolveGitignorePatterns(gitignorePath) {
11
10
  const gitignoreAbsolutePath = path.resolve(process.cwd(), gitignorePath);
12
11
  const styledGitignorePath = styleText("blue", gitignoreAbsolutePath);
@@ -150,6 +150,7 @@ const defaultOptions = {
150
150
  },
151
151
  nuxt: {
152
152
  image: false,
153
+ icon: { component: "Icon" },
153
154
  ui: { prefix: "U" }
154
155
  },
155
156
  test: {
@@ -30,6 +30,7 @@ function enableDetectedConfigs(options) {
30
30
  if (options.configs.nuxt) {
31
31
  if (options.configs.nuxt === true) options.configs.nuxt = {};
32
32
  options.configs.nuxt.ui ??= isPackageDetected("@nuxt/ui", options);
33
+ options.configs.nuxt.icon ??= isPackageDetected("@nuxt/icon", options);
33
34
  options.configs.nuxt.image ??= isPackageDetected("@nuxt/image", options);
34
35
  }
35
36
  if (options.autoDetectDeps === "verbose") logDetectedPackages();
@@ -6,26 +6,22 @@ import { createDefu } from "defu";
6
6
  //#region src/utils/options/mergeWithDefaults.ts
7
7
  const mergeOptions = createDefu((object, key, value) => {
8
8
  const stringKey = key.toString();
9
- const uniqueArrayOptions = [
9
+ if ([
10
10
  "allowedRelativeFontUnits",
11
11
  "macrosOrder",
12
12
  "blocksOrder",
13
13
  "attributesOrder"
14
- ];
15
- if (uniqueArrayOptions.includes(stringKey)) {
14
+ ].includes(stringKey)) {
16
15
  object[key] = value;
17
16
  return true;
18
17
  }
19
18
  const isValueTrue = value === true;
20
19
  const isDefaultValueFalse = object[key] === false;
21
- const isValueEmptyString = isEmptyString(value);
22
- const fallBackToDefault = isValueEmptyString || isValueTrue && !isDefaultValueFalse;
23
- return fallBackToDefault;
20
+ return isEmptyString(value) || isValueTrue && !isDefaultValueFalse;
24
21
  });
25
22
  function mergeWithDefaults(options) {
26
23
  const optionsWithDetectedConfigs = enableDetectedConfigs(options);
27
- const mergedOptions = mergeOptions(optionsWithDetectedConfigs, defaultOptions);
28
- return mergedOptions;
24
+ return mergeOptions(optionsWithDetectedConfigs, defaultOptions);
29
25
  }
30
26
 
31
27
  //#endregion
@@ -1,5 +1,5 @@
1
1
  //#region src/utils/vue/getRestrictedVueElements.ts
2
- const alternativeComponents = {
2
+ const alternativeComponentPairs = Object.entries({
3
3
  kbd: "Kbd",
4
4
  form: "Form",
5
5
  input: "Input",
@@ -12,8 +12,7 @@ const alternativeComponents = {
12
12
  textarea: "Textarea",
13
13
  details: "Accordion",
14
14
  datalist: "InputMenu"
15
- };
16
- const alternativeComponentPairs = Object.entries(alternativeComponents);
15
+ });
17
16
  function getRestrictedVueElements(prefix) {
18
17
  const restrictedElements = [];
19
18
  for (const [element, component] of alternativeComponentPairs) restrictedElements.push({
@@ -1,13 +1,12 @@
1
1
  //#region src/utils/vue/getRestrictedVueInputs.ts
2
- const alternativeComponents = {
2
+ const alternativeComponentPairs = Object.entries({
3
3
  range: "Slider",
4
4
  date: "Calendar",
5
5
  radio: "RadioGroup",
6
6
  checkbox: "Checkbox",
7
7
  color: "ColorPicker",
8
8
  number: "InputNumber"
9
- };
10
- const alternativeComponentPairs = Object.entries(alternativeComponents);
9
+ });
11
10
  function getRestrictedVueInputs(prefix) {
12
11
  const restrictedInputs = [];
13
12
  for (const [input, component] of alternativeComponentPairs) restrictedInputs.push({